From 2689c8fec95018952784bd8d032afb5a194a6616 Mon Sep 17 00:00:00 2001
From: yangys <y_ys79@sina.com>
Date: 星期二, 02 九月 2025 00:17:45 +0800
Subject: [PATCH] 增加文件监控
---
blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/controller/MachineCollectFileController.java | 2
blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/controller/FileMonitorRecordController.java | 60 +
blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/entity/FileMonitorRecord.java | 50 +
blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/filewatch/MachineFileChangeListener.java | 108 +++
blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/ApproveTableService.java | 2
blade-service/blade-mdm/src/main/java/org/springblade/mdm/basesetting/machine/entity/Machine.java | 24
blade-service/blade-mdm/src/main/java/org/springblade/mdm/commons/service/ParamService.java | 7
blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/controller/MachineFileController.java | 2
blade-service/blade-mdm/src/main/java/org/springblade/mdm/basesetting/machine/controller/MachineController.java | 11
blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/filewatch/FileLockChecker.java | 43 +
blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/mapper/FileMonitorRecordMapper.xml | 10
blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/excution/cure/DeviationCureFinishDataHandler.java | 5
blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcProgramService.java | 7
blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/ProgramConfirmTableService.java | 5
blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/excution/cure/CureFinishOperateTask.java | 16
blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/service/FileSendRecordService.java | 32
blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/vo/FileSendRecordQueryVO.java | 27
blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/vo/FileSendRecordVO.java | 20
blade-service/blade-mdm/src/main/java/org/springblade/mdm/task/ReceiveDirMoveTask.java | 2
blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/ReplaceFlowService.java | 13
blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/ApproveInfoQueryService.java | 13
blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/filewatch/FileWatcherService.java | 101 ++
blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/service/MachineFileScanService.java | 288 ++++++++
blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/entity/FileSendRecord.java | 42 +
blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/vo/FileMonitorRecordVO.java | 15
blade-service/blade-mdm/src/main/java/org/springblade/mdm/gkw/programnode/service/ProgramNodeService.java | 6
blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/controller/MachineAcceptedFileController.java | 2
blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/mapper/FileSendRecordMapper.java | 19
blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/CureFlowService.java | 5
doc/sql/mdm/mdm.mysql.all.create.sql | 29
blade-service/blade-mdm/src/main/java/org/springblade/mdm/task/SendDirCleanTask.java | 2
blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/ProcessProgRefService.java | 24
blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/FlowCommonService.java | 7
blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/filewatch/WatchInfo.java | 15
blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/service/MachineFileService.java | 35
blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/filewatch/DirectorLockService.java | 40 +
blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/mapper/FileMonitorRecordMapper.java | 20
blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/mapper/MachineFileMapper.xml | 2
blade-service/blade-mdm/src/main/java/org/springblade/mdm/config/InitBean.java | 101 ++
blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcProgramExportDNCService.java | 9
blade-service/blade-mdm/src/main/java/org/springblade/mdm/task/MachineFileScanTask.java | 47
blade-service/blade-mdm/src/main/java/org/springblade/mdm/config/ShutdownHook.java | 5
blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/filewatch/DynamicDirectoryWatcher.java | 35 +
blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/LockFlowService.java | 4
blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/controller/FileSendRecordController.java | 53 +
blade-service/blade-mdm/src/main/java/org/springblade/mdm/test/MyTestController.java | 13
/dev/null | 211 ------
blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/excution/cure/NormalCureFinishDataHandler.java | 4
blade-service/blade-mdm/src/main/java/org/springblade/mdm/basesetting/machine/service/MachineService.java | 324 +++++++++
blade-service/blade-mdm/src/main/java/org/springblade/mdm/basesetting/machinegroup/controller/MachineGroupController.java | 1
blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/service/FileMonitorRecordService.java | 25
blade-service/blade-mdm/src/main/java/org/springblade/mdm/basesetting/machine/service/MachineImportService.java | 16
blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/mapper/FileSendRecordMapper.xml | 45 +
blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcNodeService.java | 3
blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/MdmProgramImportService.java | 4
blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NodeDeptQueryService.java | 2
56 files changed, 1,621 insertions(+), 392 deletions(-)
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/basesetting/machine/MachineService.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/basesetting/machine/MachineService.java
deleted file mode 100644
index 036fe3c..0000000
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/basesetting/machine/MachineService.java
+++ /dev/null
@@ -1,211 +0,0 @@
-package org.springblade.mdm.basesetting.machine;
-
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import org.apache.commons.lang3.StringUtils;
-import org.springblade.core.excel.util.ExcelUtil;
-import org.springblade.core.log.exception.ServiceException;
-import org.springblade.core.mp.base.BizServiceImpl;
-import org.springblade.core.mp.support.Condition;
-import org.springblade.core.tool.api.R;
-import org.springblade.core.tool.utils.BeanUtil;
-import org.springblade.core.tool.utils.Func;
-import org.springblade.mdm.basesetting.machine.entity.Machine;
-import org.springblade.mdm.basesetting.machine.mapper.MachineMapper;
-import org.springblade.mdm.basesetting.machine.vo.MachineExcel;
-import org.springblade.mdm.basesetting.machine.vo.MachineQueryVO;
-import org.springblade.mdm.basesetting.machine.vo.MachineSaveVO;
-import org.springblade.mdm.basesetting.machine.vo.MachineVO;
-import org.springblade.mdm.basesetting.producedivision.entity.MdmDept;
-import org.springblade.mdm.basesetting.producedivision.entity.ProduceDivision;
-import org.springblade.mdm.basesetting.producedivision.service.MdmDeptService;
-import org.springblade.mdm.basesetting.producedivision.vo.DivisionExcel;
-import org.springblade.mdm.basesetting.producedivision.vo.ImportResult;
-import org.springblade.mdm.basesetting.producedivision.vo.QinzheFgbExcel;
-import org.springblade.system.feign.ISysClient;
-import org.springblade.system.pojo.entity.Dept;
-import org.springframework.beans.BeanUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-import org.springframework.web.multipart.MultipartFile;
-
-import java.io.IOException;
-import java.nio.file.Files;
-import java.nio.file.InvalidPathException;
-import java.nio.file.Path;
-import java.nio.file.Paths;
-import java.util.ArrayList;
-import java.util.List;
-
-@Service
-public class MachineService extends BizServiceImpl<MachineMapper, Machine> {
- @Autowired
- private ISysClient sysClient;
- @Autowired
- private MdmDeptService mdmDeptService;
- @Transactional
- public void saveMachine(MachineSaveVO vo){
- checkMachine(vo);
- if(existsByCode(vo.getCode(),null)){
- throw new ServiceException("鏈哄簥缂栫爜宸插瓨鍦�:"+vo.getCode());
- }
-
- Machine machine = new Machine();
- BeanUtil.copyProperties(vo, machine);
- machine.setId(null);
- this.save(machine);
- }
-
- /**
- * 妫�鏌ユ満搴婂綍鍏ユ暟鎹�
- * @param vo 褰曞叆鐨勮〃鍗曟暟鎹甐O
- */
- void checkMachine(MachineSaveVO vo){
- if(Func.isEmpty(vo.getCode())){
- throw new ServiceException("鏈哄簥缂栫爜涓嶈兘涓虹┖");
- }
-
- if(Func.isEmpty(vo.getName())){
- throw new ServiceException("鏈哄簥绫诲瀷涓嶈兘涓虹┖");
- }
-
- if(Func.isEmpty(vo.getMachineGroupCode())){
- throw new ServiceException("鎵�灞炵粍缁囦笉鑳戒负绌�");
- }
-
- if(Func.isEmpty(vo.getMachineSpec())){
- throw new ServiceException("鏈哄簥绫诲瀷涓嶈兘涓虹┖");
- }
- }
-
- /**
- * 鏍规嵁鏈哄簥缂栫爜鍒ゆ柇鏈哄簥鏄惁瀛樺湪
- * @param code 鏈哄簥缂栫爜
- * @param excludeId 鎺掗櫎id
- * @return 鏄惁瀛樺湪
- */
- boolean existsByCode(String code,Long excludeId){
- return this.lambdaQuery().eq(Machine::getCode, code).ne(excludeId!=null,Machine::getId, excludeId).count()>0;
- }
-
- public boolean updateMachine(MachineSaveVO vo) {
-
- checkMachine(vo);
- if(existsByCode(vo.getCode(),vo.getId())){
- throw new ServiceException("鏈哄簥缂栫爜宸插瓨鍦�:"+vo.getCode());
- }
-
- Machine machine = this.getById(vo.getId());
-
- machine.setMachineSpec(vo.getMachineSpec());
- machine.setCode(vo.getCode());
- machine.setName(vo.getName());
- machine.setMachineGroupCode(vo.getMachineGroupCode());
- machine.setManufacturer(vo.getManufacturer());
- machine.setOperator(vo.getOperator());
- machine.setControlSystem(vo.getControlSystem());
- machine.setOwnerDept(vo.getOwnerDept());
- machine.setProgSendDir(vo.getProgSendDir());
- machine.setProgReceiveDir(vo.getProgReceiveDir());
- machine.setProgTempDir(vo.getProgTempDir());
- machine.setStatus(vo.getStatus());
- machine.setRemark(vo.getRemark());
- machine.setSendDirExpiryHours(vo.getSendDirExpiryHours());
- machine.setReceiveDirExpiryHours(vo.getReceiveDirExpiryHours());
-
- return this.updateById(machine);
- }
-
-
-
-
- /**
- * 鏌ヨ鍒嗛〉
- * @param query 鏌ヨ鍙傛暟
- * @return 鍒嗛〉鏁版嵁
- */
- public IPage<MachineVO> pageQuery(MachineQueryVO query) {
-
- if (query.getDeptId() != null) {
- R<Dept> rs = sysClient.getDept(query.getDeptId());
- if(rs.isSuccess()){
- query.setDeptAncestors(rs.getData().getAncestors()+","+rs.getData().getId());
- }
- }
- return this.getBaseMapper().pageQuery(Condition.getPage(query), query);
- }
-
- /**
- * 鏌ヨ璇︽儏
- * @param id 鏈哄簥id
- * @return
- */
- public MachineVO detail(long id) {
- Machine machine = this.getById(id);
-
- MachineVO vo = new MachineVO();
- BeanUtil.copyProperties(machine, vo);
-
- return vo;
- }
-
- /**
- * 浜х敓鏈哄簥鍥炰紶缁撴瀯鏁版嵁
- * @param id
- */
- public void genMachineFileBackDirs(Long id) throws IOException {
- Machine machine = this.getById(id);
- if(Func.isNotBlank(machine.getProgReceiveDir())){
- if(isLegalDirectoryPath(machine.getProgReceiveDir())) {
- Path path = Paths.get(machine.getProgReceiveDir());
- Files.createDirectories(path);
- }else{
- throw new RuntimeException("闈炴硶鐨勭洰褰曟牸寮�");
- }
- }
- }
-
- /**
- * 鍒ゆ柇鏄惁鏄悎娉曠殑鐩綍鏍煎紡
- * @param path
- * @return
- */
- static boolean isLegalDirectoryPath(String path) {
- // 鍩虹妫�鏌�
- if (path == null || path.trim().isEmpty()) {
- return false;
- }
-
- // 浣跨敤NIO妫�鏌ヨ矾寰勬牸寮�
- Path nioPath;
- try {
- nioPath = Paths.get(path);
- if (!nioPath.normalize().toString().equals(path)) {
- return false; // 璺緞涓嶈鑼�
- }
- } catch (InvalidPathException ex) {
- return false;
- }
-
- return true;
-
- }
-
- /**
- * 鏍规嵁鏈哄簥缂栫爜鑾峰彇鏈哄簥
- * @param machineCode 鏈哄簥缂栫爜
- * @return
- */
- public Machine getByCode(String machineCode) {
- return this.lambdaQuery().eq(Machine::getCode, machineCode).one();
- }
-
- /**
- * 鑾峰彇鎵�鏈夊惎鐢ㄧ姸鎬佺殑鏈哄簥鍒楄〃
- * @return 鏈哄簥鍒楄〃
- */
- public List<Machine> getEnableMachines() {
- return lambdaQuery().eq(Machine::getStatus,Machine.STATUS_ENABLE).list();
- }
-}
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/basesetting/machine/controller/MachineController.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/basesetting/machine/controller/MachineController.java
index 1962ee3..c810b36 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/basesetting/machine/controller/MachineController.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/basesetting/machine/controller/MachineController.java
@@ -12,7 +12,7 @@
import org.springblade.core.tool.api.R;
import org.springblade.core.tool.utils.DateUtil;
import org.springblade.core.tool.utils.Func;
-import org.springblade.mdm.basesetting.machine.MachineService;
+import org.springblade.mdm.basesetting.machine.service.MachineService;
import org.springblade.mdm.basesetting.machine.service.MachineImportService;
import org.springblade.mdm.basesetting.machine.vo.MachineExcel;
import org.springblade.mdm.basesetting.machine.vo.MachineQueryVO;
@@ -64,7 +64,11 @@
@Operation(summary = "淇敼", description = "鏈哄簥淇℃伅")
@PostMapping("/update")
public R<Boolean> update(@RequestBody MachineSaveVO vo) {
- return R.<Boolean>status(service.updateMachine(vo));
+ try{
+ return R.data(service.updateMachine(vo));
+ }catch(Exception e){
+ return R.fail(e.getMessage());
+ }
}
@Operation(summary = "璇︽儏", description = "鏌ヨ鏈哄簥璇︽儏")
@@ -145,7 +149,7 @@
log.error("瀵煎嚭鍒嗘満搴婃ā鏉垮紓甯�", e);
}
}
-
+ /*
@Operation(summary = "浜х敓鏈哄簥鍥炰紶缁撴瀯鏍�", description = "浜х敓鏈哄簥鍥炰紶缁撴瀯鏍�")
@PostMapping("/gen-fileback-dirs")
public R<Void> genFileBackDirs(@RequestParam Long id) {
@@ -157,4 +161,5 @@
}
return R.status(true);
}
+ */
}
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/basesetting/machine/entity/Machine.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/basesetting/machine/entity/Machine.java
index 560accc..66b35a9 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/basesetting/machine/entity/Machine.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/basesetting/machine/entity/Machine.java
@@ -1,13 +1,16 @@
package org.springblade.mdm.basesetting.machine.entity;
import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.Setter;
+import org.apache.commons.lang3.StringUtils;
import org.springblade.core.mp.base.BaseEntity;
import org.springblade.core.mp.base.BizEntity;
@Setter
@Getter
+@EqualsAndHashCode(callSuper = false)
@TableName("mdm_machine")
public class Machine extends BizEntity {
/**
@@ -73,4 +76,25 @@
*/
private String remark;
+ /**
+ * 娓呴櫎璺緞鏈熬鐨勬枩鏉�
+ * @param oriDir
+ * @return
+ */
+ public static String clearDirEnd(String oriDir){
+ return StringUtils.removeEnd(StringUtils.removeEnd(oriDir, "/"), "\\");
+ }
+
+ /**
+ * 鐩綍鏄惁鍙樻洿
+ * @param oriDir
+ * @param currentDir
+ * @return
+ */
+ public static boolean dirChanged(String oriDir,String currentDir){
+ String dir1 = clearDirEnd(oriDir);
+ String dir2 = clearDirEnd(currentDir);
+ return StringUtils.equals(dir1, dir2);
+ }
+
}
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/basesetting/machine/service/MachineImportService.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/basesetting/machine/service/MachineImportService.java
index dbf2356..82724a1 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/basesetting/machine/service/MachineImportService.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/basesetting/machine/service/MachineImportService.java
@@ -1,30 +1,19 @@
package org.springblade.mdm.basesetting.machine.service;
-import com.baomidou.mybatisplus.core.metadata.IPage;
import io.jsonwebtoken.lang.Collections;
import org.apache.commons.lang3.StringUtils;
import org.springblade.core.excel.util.ExcelUtil;
-import org.springblade.core.log.exception.ServiceException;
import org.springblade.core.mp.base.BizServiceImpl;
-import org.springblade.core.mp.support.Condition;
import org.springblade.core.tool.api.R;
-import org.springblade.core.tool.utils.BeanUtil;
-import org.springblade.core.tool.utils.Func;
import org.springblade.core.tool.utils.StringUtil;
-import org.springblade.mdm.basesetting.machine.MachineService;
import org.springblade.mdm.basesetting.machine.entity.Machine;
import org.springblade.mdm.basesetting.machine.mapper.MachineMapper;
import org.springblade.mdm.basesetting.machine.vo.MachineExcel;
-import org.springblade.mdm.basesetting.machine.vo.MachineQueryVO;
-import org.springblade.mdm.basesetting.machine.vo.MachineSaveVO;
-import org.springblade.mdm.basesetting.machine.vo.MachineVO;
import org.springblade.mdm.basesetting.producedivision.entity.MdmDept;
-import org.springblade.mdm.basesetting.producedivision.entity.ProduceDivision;
import org.springblade.mdm.basesetting.producedivision.service.MdmDeptService;
import org.springblade.mdm.basesetting.producedivision.vo.ImportResult;
import org.springblade.system.feign.IDictBizClient;
import org.springblade.system.feign.ISysClient;
-import org.springblade.system.pojo.entity.Dept;
import org.springblade.system.pojo.entity.DictBiz;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
@@ -32,11 +21,6 @@
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
-import java.io.IOException;
-import java.nio.file.Files;
-import java.nio.file.InvalidPathException;
-import java.nio.file.Path;
-import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/basesetting/machine/service/MachineService.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/basesetting/machine/service/MachineService.java
new file mode 100644
index 0000000..7c3f930
--- /dev/null
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/basesetting/machine/service/MachineService.java
@@ -0,0 +1,324 @@
+package org.springblade.mdm.basesetting.machine.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.apache.commons.lang3.StringUtils;
+import org.springblade.core.log.exception.ServiceException;
+import org.springblade.core.mp.base.BizServiceImpl;
+import org.springblade.core.mp.support.Condition;
+import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.BeanUtil;
+import org.springblade.core.tool.utils.Func;
+import org.springblade.core.tool.utils.SpringUtil;
+import org.springblade.mdm.basesetting.machine.entity.Machine;
+import org.springblade.mdm.basesetting.machine.mapper.MachineMapper;
+import org.springblade.mdm.basesetting.machine.vo.MachineQueryVO;
+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.ParamService;
+import org.springblade.mdm.machinefile.entity.MachineFile;
+import org.springblade.mdm.machinefile.filewatch.DynamicDirectoryWatcher;
+import org.springblade.mdm.machinefile.filewatch.MachineFileChangeListener;
+import org.springblade.mdm.machinefile.filewatch.WatchInfo;
+import org.springblade.mdm.machinefile.service.MachineFileService;
+import org.springblade.mdm.program.service.ProgramAnnotationService;
+import org.springblade.system.feign.ISysClient;
+import org.springblade.system.pojo.entity.Dept;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.InvalidPathException;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.List;
+
+@Service
+public class MachineService extends BizServiceImpl<MachineMapper, Machine> {
+ @Autowired
+ private ISysClient sysClient;
+ @Autowired
+ private DynamicDirectoryWatcher dynamicDirectoryWatcher;
+ @Autowired
+ private ParamService paramService;
+ @Transactional(rollbackFor = Exception.class)
+ public void saveMachine(MachineSaveVO vo) throws IOException {
+ checkMachine(vo);
+ if(existsByCode(vo.getCode(),null)){
+ throw new ServiceException("鏈哄簥缂栫爜宸插瓨鍦�:"+vo.getCode());
+ }
+
+ Machine machine = new Machine();
+ BeanUtil.copyProperties(vo, machine);
+ machine.setId(null);
+ this.save(machine);
+ makeMachineDirs(machine);
+ addDirWatcher(machine);
+ }
+
+
+ void makeMachineDirs(Machine machine) throws IOException {
+ Path dir;
+ if(StringUtils.isNotBlank(machine.getProgSendDir())){
+ createDirIsNotExists(machine.getProgSendDir());
+
+ }
+
+ if(StringUtils.isNotBlank(machine.getProgReceiveDir())){
+ createDirIsNotExists(machine.getProgReceiveDir());
+ }
+
+ if(StringUtils.isNotBlank(machine.getProgTempDir())){
+ createDirIsNotExists(machine.getProgTempDir());
+ }
+ }
+
+ void createDirIsNotExists(String pathdir) throws IOException {
+ Path dir = Paths.get(pathdir);
+ if(!Files.exists(dir)){
+ Files.createDirectories(dir);
+ }
+ }
+ void addDirWatcher(Machine machine){
+ String type = paramService.networkType();
+ if(type.equals(ParamService.NETWORK_TYPE_SHEMI)){
+ //娑夊瘑缃戜笉闇�瑕佺洃鎺х洰褰�
+ return;
+ }
+ try {
+ MachineFileService machineFileService = SpringUtil.getBean(MachineFileService.class);
+ ProgramAnnotationService annoService = SpringUtil.getBean(ProgramAnnotationService.class);
+
+ if(StringUtils.isNotBlank(machine.getProgSendDir())) {
+ WatchInfo watchInfoSend = new WatchInfo();
+ watchInfoSend.setMachine(machine);
+ watchInfoSend.setDirType(MachineFile.DIR_TYPE_SEND);
+ watchInfoSend.setPath(machine.getProgSendDir());
+
+ if(!dynamicDirectoryWatcher.containsPath(Paths.get(machine.getProgSendDir()))) {
+ dynamicDirectoryWatcher.addDirectory(Paths.get(machine.getProgSendDir()),
+ new MachineFileChangeListener(machineFileService,
+ annoService,
+ watchInfoSend));
+ }
+ }
+
+ if(StringUtils.isNotBlank(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()),
+ new MachineFileChangeListener(machineFileService,
+ annoService,
+ watchInfoRec));
+ }
+ }
+
+ if(StringUtils.isNotBlank(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()),
+ new MachineFileChangeListener(machineFileService,
+ annoService,
+ watchInfoTemp));
+ }
+ }
+ } catch (Exception e) {
+ log.error("澧炲姞鏈哄簥鐩戞帶寮傚父",e);
+ throw new RuntimeException(e);
+ }
+ }
+ /**
+ * 妫�鏌ユ満搴婂綍鍏ユ暟鎹�
+ * @param vo 褰曞叆鐨勮〃鍗曟暟鎹甐O
+ */
+ void checkMachine(MachineSaveVO vo){
+ if(Func.isEmpty(vo.getCode())){
+ throw new ServiceException("鏈哄簥缂栫爜涓嶈兘涓虹┖");
+ }
+
+ if(Func.isEmpty(vo.getName())){
+ throw new ServiceException("鏈哄簥绫诲瀷涓嶈兘涓虹┖");
+ }
+
+ if(Func.isEmpty(vo.getMachineGroupCode())){
+ throw new ServiceException("鎵�灞炵粍缁囦笉鑳戒负绌�");
+ }
+
+ if(Func.isEmpty(vo.getMachineSpec())){
+ throw new ServiceException("鏈哄簥绫诲瀷涓嶈兘涓虹┖");
+ }
+ }
+
+ /**
+ * 鏍规嵁鏈哄簥缂栫爜鍒ゆ柇鏈哄簥鏄惁瀛樺湪
+ * @param code 鏈哄簥缂栫爜
+ * @param excludeId 鎺掗櫎id
+ * @return 鏄惁瀛樺湪
+ */
+ boolean existsByCode(String code,Long excludeId){
+ return this.lambdaQuery().eq(Machine::getCode, code).ne(excludeId!=null,Machine::getId, excludeId).count()>0;
+ }
+
+ /**
+ * 淇敼鏈哄簥淇℃伅
+ * @param vo
+ * @return
+ */
+ public boolean updateMachine(MachineSaveVO vo) throws Exception {
+
+ checkMachine(vo);
+ if(existsByCode(vo.getCode(),vo.getId())){
+ throw new ServiceException("鏈哄簥缂栫爜宸插瓨鍦�:"+vo.getCode());
+ }
+
+ Machine machine = this.getById(vo.getId());
+
+ Machine machineBak = new Machine();
+ BeanUtil.copyProperties(machine, machineBak);
+
+ machine.setMachineSpec(vo.getMachineSpec());
+ machine.setCode(vo.getCode());
+ machine.setName(vo.getName());
+ machine.setMachineGroupCode(vo.getMachineGroupCode());
+ machine.setManufacturer(vo.getManufacturer());
+ machine.setOperator(vo.getOperator());
+ machine.setControlSystem(vo.getControlSystem());
+ machine.setOwnerDept(vo.getOwnerDept());
+ machine.setProgSendDir(vo.getProgSendDir());
+ machine.setProgReceiveDir(vo.getProgReceiveDir());
+ machine.setProgTempDir(vo.getProgTempDir());
+ machine.setStatus(vo.getStatus());
+ machine.setRemark(vo.getRemark());
+ machine.setSendDirExpiryHours(vo.getSendDirExpiryHours());
+ machine.setReceiveDirExpiryHours(vo.getReceiveDirExpiryHours());
+
+ boolean updateR = this.updateById(machine);
+ removeDirWatcher(machineBak);
+ addDirWatcher(machine);
+
+ return updateR;
+ }
+
+ /**
+ * 鍘绘帀鐩綍鐩戞帶
+ * @param machine
+ * @throws Exception
+ */
+ private void removeDirWatcher(Machine machine) throws Exception {
+ String type = paramService.networkType();
+ if(type.equals(ParamService.NETWORK_TYPE_SHEMI)){
+ //娑夊瘑缃戜笉闇�瑕佺洃鎺х洰褰�
+ return;
+ }
+ if(StringUtils.isNotBlank(machine.getProgSendDir())) {
+ dynamicDirectoryWatcher.removeDirectory(Paths.get(machine.getProgSendDir()));
+ }
+
+ if(StringUtils.isNotBlank(machine.getProgReceiveDir())) {
+ dynamicDirectoryWatcher.removeDirectory(Paths.get(machine.getProgReceiveDir()));
+ }
+
+ if(StringUtils.isNotBlank(machine.getProgTempDir())) {
+ dynamicDirectoryWatcher.removeDirectory(Paths.get(machine.getProgTempDir()));
+ }
+ }
+
+ /**
+ * 鏌ヨ鍒嗛〉
+ * @param query 鏌ヨ鍙傛暟
+ * @return 鍒嗛〉鏁版嵁
+ */
+ public IPage<MachineVO> pageQuery(MachineQueryVO query) {
+
+ if (query.getDeptId() != null) {
+ R<Dept> rs = sysClient.getDept(query.getDeptId());
+ if(rs.isSuccess()){
+ query.setDeptAncestors(rs.getData().getAncestors()+","+rs.getData().getId());
+ }
+ }
+ return this.getBaseMapper().pageQuery(Condition.getPage(query), query);
+ }
+
+ /**
+ * 鏌ヨ璇︽儏
+ * @param id 鏈哄簥id
+ * @return
+ */
+ public MachineVO detail(long id) {
+ Machine machine = this.getById(id);
+
+ MachineVO vo = new MachineVO();
+ BeanUtil.copyProperties(machine, vo);
+
+ return vo;
+ }
+
+ /**
+ * 浜х敓鏈哄簥鍥炰紶缁撴瀯鏁版嵁
+ * @param id
+ */
+ /*
+ public void genMachineFileBackDirs(Long id) throws IOException {
+ Machine machine = this.getById(id);
+ if(Func.isNotBlank(machine.getProgReceiveDir())){
+ if(isLegalDirectoryPath(machine.getProgReceiveDir())) {
+ Path path = Paths.get(machine.getProgReceiveDir());
+ Files.createDirectories(path);
+ }else{
+ throw new RuntimeException("闈炴硶鐨勭洰褰曟牸寮�");
+ }
+ }
+ }*/
+
+ /**
+ * 鍒ゆ柇鏄惁鏄悎娉曠殑鐩綍鏍煎紡
+ * @param path
+ * @return
+ */
+ static boolean isLegalDirectoryPath(String path) {
+ // 鍩虹妫�鏌�
+ if (path == null || path.trim().isEmpty()) {
+ return false;
+ }
+
+ // 浣跨敤NIO妫�鏌ヨ矾寰勬牸寮�
+ Path nioPath;
+ try {
+ nioPath = Paths.get(path);
+ if (!nioPath.normalize().toString().equals(path)) {
+ return false; // 璺緞涓嶈鑼�
+ }
+ } catch (InvalidPathException ex) {
+ return false;
+ }
+
+ return true;
+
+ }
+
+ /**
+ * 鏍规嵁鏈哄簥缂栫爜鑾峰彇鏈哄簥
+ * @param machineCode 鏈哄簥缂栫爜
+ * @return
+ */
+ public Machine getByCode(String machineCode) {
+ return this.lambdaQuery().eq(Machine::getCode, machineCode).one();
+ }
+
+ /**
+ * 鑾峰彇鎵�鏈夊惎鐢ㄧ姸鎬佺殑鏈哄簥鍒楄〃
+ * @return 鏈哄簥鍒楄〃
+ */
+ public List<Machine> getEnableMachines() {
+ return lambdaQuery().eq(Machine::getStatus,Machine.STATUS_ENABLE).list();
+ }
+
+}
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/basesetting/machinegroup/controller/MachineGroupController.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/basesetting/machinegroup/controller/MachineGroupController.java
index 272cbbd..1b1bd68 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/basesetting/machinegroup/controller/MachineGroupController.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/basesetting/machinegroup/controller/MachineGroupController.java
@@ -11,7 +11,6 @@
import org.springblade.core.mp.support.Query;
import org.springblade.core.tool.api.R;
import org.springblade.core.tool.utils.Func;
-import org.springblade.mdm.basesetting.machine.MachineService;
import org.springblade.mdm.basesetting.machinegroup.MachineGroupService;
import org.springblade.mdm.basesetting.machinegroup.entity.MachineGroup;
import org.springframework.beans.factory.annotation.Autowired;
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/commons/service/ParamService.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/commons/service/ParamService.java
index beb8be6..802bc25 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/commons/service/ParamService.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/commons/service/ParamService.java
@@ -106,4 +106,11 @@
return getParamValue(
APPROVE_TABLE_TEMPLATE,"");
}
+
+ public String networkType() {
+ return getParamValue(
+ NETWORK_TYPE,NETWORK_TYPE_SHEMI);
+ }
+
+
}
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/config/InitBean.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/config/InitBean.java
index e4d826d..2fbd7d6 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/config/InitBean.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/config/InitBean.java
@@ -3,22 +3,117 @@
import jakarta.annotation.PostConstruct;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
-import org.springblade.core.oss.OssTemplate;
+import org.apache.commons.lang3.StringUtils;
+import org.springblade.mdm.basesetting.machine.service.MachineService;
+import org.springblade.mdm.basesetting.machine.entity.Machine;
+import org.springblade.mdm.commons.service.ParamService;
+import org.springblade.mdm.machinefile.entity.MachineFile;
+import org.springblade.mdm.machinefile.filewatch.*;
+import org.springblade.mdm.machinefile.service.MachineFileScanService;
+import org.springblade.mdm.machinefile.service.MachineFileService;
+import org.springblade.mdm.program.service.ProgramAnnotationService;
import org.springblade.system.feign.ISysClient;
import org.springframework.stereotype.Component;
+
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.ArrayList;
+import java.util.List;
@Slf4j
@AllArgsConstructor
@Component
public class InitBean {
-
- private final OssTemplate ossTemplate;
+ private final DirectorLockService directorLockService;
+ private final DynamicDirectoryWatcher directoryWatcher;
+ private final MachineService machineService;
+ private final MachineFileService machineFileService;
+ private final ParamService paramService;
+ private final ProgramAnnotationService annotationService;
+ private final MachineFileScanService machineFileScanService;
private final ISysClient sysClient;
@PostConstruct
public void init() {
log.info("搴旂敤鍚姩鏃舵墽琛屽垵濮嬪寲鎿嶄綔 @PostConstruct");
+ String networkType = paramService.networkType();
+ if(!ParamService.NETWORK_TYPE_SHEMI.equals(networkType)) {
+ machineFileScanService.scanMachineFile();//鍚姩鎵ц涓�娆℃壂鎻�
+ //宸ユ帶缃戞墠鍚姩鏂囦欢鐩戞帶
+ log.info("宸ユ帶缃戝惎鍔ㄦ枃浠剁洃鎺�");
+ initMachineDirMonitor();
+ }
+ }
+
+ /**
+ * 鍒濆鍖栫洃鎺х洰褰�
+ */
+ void initMachineDirMonitor() {
+ boolean locked = directorLockService.acquireLock();
+ if (!locked) {
+ log.info("鍥炰紶鎺ユ敹鐩綍宸茬粡琚叾浠栭儴缃茬偣浣嶉攣瀹氾紝鐩存帴杩斿洖");
+ return;
+ }
+
+ List<Machine> machineList = machineService.getEnableMachines();;
+ List<WatchInfo> monitorInfoList = new ArrayList<>();
+ machineList.forEach(m -> {
+ addToWatchDirList(monitorInfoList,m);
+ });
+ for (WatchInfo info : monitorInfoList) {
+ Path dirPath = Paths.get(info.getPath());
+ try {
+ if(!dirPath.toFile().exists()) {
+ dirPath.toFile().mkdirs();
+ }
+ directoryWatcher.addDirectory(dirPath,getListener(info));
+ } catch (Exception e) {
+ log.error("娣诲姞鐩戞帶鐩綍寮傚父",e);
+ }
+ }
}
+ void addToWatchDirList(List<WatchInfo> monitorDirList,Machine machine){
+ String dir;
+ //鍔犲叆send鏂囦欢澶�
+ if (StringUtils.isNotEmpty(machine.getProgSendDir())) {
+ dir = StringUtils.removeEnd(StringUtils.removeEnd(machine.getProgSendDir(), "/"), "\\");
+ WatchInfo watchInfo = new WatchInfo();
+ watchInfo.setMachine(machine);
+ watchInfo.setDirType(MachineFile.DIR_TYPE_SEND);
+ watchInfo.setPath(dir);
+ if (!monitorDirList.contains(watchInfo)) {
+ monitorDirList.add(watchInfo);
+ }
+ }
+
+ //鍔犲叆rec鏂囦欢澶�
+ if (StringUtils.isNotEmpty(machine.getProgReceiveDir())) {
+ dir = StringUtils.removeEnd(StringUtils.removeEnd(machine.getProgReceiveDir(), "/"), "\\");
+ WatchInfo watchInfo = new WatchInfo();
+ watchInfo.setMachine(machine);
+ watchInfo.setDirType(MachineFile.DIR_TYPE_REC);
+ watchInfo.setPath(dir);
+ if (!monitorDirList.contains(watchInfo)) {
+ monitorDirList.add(watchInfo);
+ }
+ }
+
+ //鍔犲叆temp鏂囦欢澶�
+ if (StringUtils.isNotEmpty(machine.getProgTempDir())) {
+ dir = StringUtils.removeEnd(StringUtils.removeEnd(machine.getProgTempDir(), "/"), "\\");
+ WatchInfo watchInfo = new WatchInfo();
+ watchInfo.setMachine(machine);
+ watchInfo.setDirType(MachineFile.DIR_TYPE_TEMP);
+ watchInfo.setPath(dir);
+ if (!monitorDirList.contains(watchInfo)) {
+ monitorDirList.add(watchInfo);
+ }
+ }
+ }
+
+ FileWatcherService.FileChangeListener getListener(WatchInfo info) {
+ return new MachineFileChangeListener(machineFileService,annotationService,info);
+ }
}
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/config/ShutdownHook.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/config/ShutdownHook.java
index 4a98ec6..35bd28a 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/config/ShutdownHook.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/config/ShutdownHook.java
@@ -2,12 +2,13 @@
import jakarta.annotation.PreDestroy;
import lombok.AllArgsConstructor;
+import org.springblade.mdm.machinefile.filewatch.DirectorLockService;
import org.springframework.stereotype.Component;
@AllArgsConstructor
@Component
public class ShutdownHook {
-
+ private final DirectorLockService directorLockService;
@PreDestroy
public void onExit() {
System.out.println("鎵ц閫�鍑哄墠娓呯悊鎿嶄綔...");
@@ -15,6 +16,6 @@
// 2. 閲婃斁璧勬簮
// 3. 淇濆瓨鐘舵��
// 4. 閫氱煡鍏朵粬鏈嶅姟
-
+ directorLockService.releaseLock();
}
}
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/excution/cure/CureFinishOperateTask.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/excution/cure/CureFinishOperateTask.java
index 7aa82e7..72e7726 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/excution/cure/CureFinishOperateTask.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/excution/cure/CureFinishOperateTask.java
@@ -2,16 +2,8 @@
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
-import org.apache.commons.io.IOUtils;
import org.flowable.engine.delegate.DelegateExecution;
import org.springblade.core.oss.OssTemplate;
-import org.springblade.core.oss.model.BladeFile;
-import org.springblade.core.tool.api.R;
-import org.springblade.core.tool.utils.DateUtil;
-import org.springblade.mdm.basesetting.machine.MachineService;
-import org.springblade.mdm.basesetting.machine.entity.Machine;
-import org.springblade.mdm.commons.contants.ParamConstants;
-import org.springblade.mdm.flow.entity.FlowProgramFile;
import org.springblade.mdm.flow.excution.dispatch.FinishDataHandler;
import org.springblade.mdm.flow.service.FlowCommonService;
import org.springblade.mdm.flow.service.FlowProgramFileService;
@@ -19,19 +11,11 @@
import org.springblade.mdm.program.entity.NcNode;
import org.springblade.mdm.program.service.NcNodeAutoCreateService;
import org.springblade.mdm.program.service.NcNodeService;
-import org.springblade.mdm.program.service.ProgramAnnotationService;
import org.springblade.system.feign.ISysClient;
-import org.springblade.system.pojo.entity.DictBiz;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
-import java.io.ByteArrayInputStream;
import java.io.IOException;
-import java.io.InputStream;
-import java.time.LocalDate;
-import java.util.Arrays;
-import java.util.Date;
-import java.util.List;
@Slf4j
@Component("cureFinishOperateTask")
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/excution/cure/DeviationCureFinishDataHandler.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/excution/cure/DeviationCureFinishDataHandler.java
index d651e67..d7b6dd4 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/excution/cure/DeviationCureFinishDataHandler.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/excution/cure/DeviationCureFinishDataHandler.java
@@ -1,9 +1,7 @@
package org.springblade.mdm.flow.excution.cure;
import lombok.extern.slf4j.Slf4j;
-import org.springblade.core.tool.utils.Func;
-import org.springblade.mdm.basesetting.machine.MachineService;
-import org.springblade.mdm.flow.constants.FlowContants;
+import org.springblade.mdm.basesetting.machine.service.MachineService;
import org.springblade.mdm.flow.entity.ApproveRecord;
import org.springblade.mdm.flow.entity.FlowProgramFile;
import org.springblade.mdm.flow.excution.dispatch.FinishDataHandler;
@@ -11,7 +9,6 @@
import org.springblade.mdm.flow.service.FlowProgramFileService;
import org.springblade.mdm.flow.service.FlowProgramProperties;
import org.springblade.mdm.program.entity.NcNode;
-import org.springblade.mdm.program.entity.NcProgramApproved;
import org.springblade.mdm.program.service.NcNodeAutoCreateService;
import org.springblade.mdm.program.service.NcNodeService;
import org.springblade.mdm.program.service.NcProgramApprovedService;
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/excution/cure/NormalCureFinishDataHandler.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/excution/cure/NormalCureFinishDataHandler.java
index 773f109..231e377 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/excution/cure/NormalCureFinishDataHandler.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/excution/cure/NormalCureFinishDataHandler.java
@@ -7,11 +7,9 @@
import org.springblade.core.oss.model.BladeFile;
import org.springblade.core.tool.api.R;
import org.springblade.core.tool.utils.DateUtil;
-import org.springblade.core.tool.utils.Func;
-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.contants.ParamConstants;
-import org.springblade.mdm.flow.constants.FlowContants;
import org.springblade.mdm.flow.entity.ApproveRecord;
import org.springblade.mdm.flow.entity.FlowProgramFile;
import org.springblade.mdm.flow.excution.dispatch.FinishDataHandler;
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/ApproveInfoQueryService.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/ApproveInfoQueryService.java
index e6ca386..3ec57b0 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/ApproveInfoQueryService.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/ApproveInfoQueryService.java
@@ -1,22 +1,12 @@
package org.springblade.mdm.flow.service;
-import com.itextpdf.text.Chunk;
-import com.itextpdf.text.DocumentException;
-import com.itextpdf.text.Font;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.flowable.engine.HistoryService;
import org.flowable.task.api.history.HistoricTaskInstance;
-import org.springblade.core.oss.OssTemplate;
import org.springblade.core.tool.api.R;
-import org.springblade.core.tool.utils.DateUtil;
import org.springblade.core.tool.utils.Func;
-import org.springblade.mdm.basesetting.machine.MachineService;
-import org.springblade.mdm.basesetting.machine.entity.Machine;
-import org.springblade.mdm.commons.service.ParamService;
-import org.springblade.mdm.commons.support.TemplatedPdfWriter;
-import org.springblade.mdm.flow.constants.FlowContants;
import org.springblade.mdm.flow.vo.ApproveTableInfo;
import org.springblade.mdm.program.entity.NcNode;
import org.springblade.mdm.program.entity.NcProgramApproved;
@@ -27,9 +17,6 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
import java.util.*;
/**
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/ApproveTableService.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/ApproveTableService.java
index ec17e64..accafb2 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/ApproveTableService.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/ApproveTableService.java
@@ -5,7 +5,7 @@
import org.apache.commons.lang3.StringUtils;
import org.springblade.core.oss.OssTemplate;
import org.springblade.core.tool.utils.DateUtil;
-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.ParamService;
import org.springblade.mdm.commons.support.TemplatedPdfWriter;
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/CureFlowService.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/CureFlowService.java
index 9a6e195..ba90311 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/CureFlowService.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/CureFlowService.java
@@ -2,16 +2,13 @@
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
-import org.flowable.engine.HistoryService;
import org.flowable.engine.IdentityService;
import org.flowable.engine.RuntimeService;
-import org.flowable.engine.TaskService;
import org.flowable.engine.runtime.ProcessInstance;
import org.springblade.core.secure.utils.AuthUtil;
import org.springblade.core.tool.utils.Func;
-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.basesetting.producedivision.entity.ProduceDivision;
import org.springblade.mdm.basesetting.producedivision.service.ProduceDivisionService;
import org.springblade.mdm.flow.constants.FlowContants;
import org.springblade.mdm.flow.entity.FlowProgramFile;
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/FlowCommonService.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/FlowCommonService.java
index 8304ada..a79f69a 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/FlowCommonService.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/FlowCommonService.java
@@ -4,15 +4,12 @@
import lombok.AllArgsConstructor;
import org.flowable.engine.HistoryService;
import org.flowable.engine.RuntimeService;
-import org.flowable.engine.TaskService;
import org.flowable.engine.history.HistoricProcessInstance;
import org.flowable.engine.runtime.ProcessInstance;
-import org.flowable.task.api.Task;
import org.flowable.task.api.history.HistoricTaskInstance;
import org.springblade.core.tool.api.R;
import org.springblade.core.tool.utils.Func;
-import org.springblade.core.tool.utils.StringUtil;
-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.basesetting.producedivision.entity.ProduceDivision;
import org.springblade.mdm.basesetting.producedivision.service.ProduceDivisionService;
@@ -22,8 +19,6 @@
import org.springblade.system.feign.IUserClient;
import org.springblade.system.pojo.entity.User;
import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-import org.springframework.web.bind.annotation.RequestBody;
import java.util.List;
import java.util.Map;
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/LockFlowService.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/LockFlowService.java
index 47a0d67..1db2720 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/LockFlowService.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/LockFlowService.java
@@ -6,19 +6,15 @@
import org.flowable.engine.runtime.ProcessInstance;
import org.springblade.core.log.exception.ServiceException;
import org.springblade.core.secure.utils.AuthUtil;
-import org.springblade.mdm.basesetting.machine.MachineService;
-import org.springblade.mdm.basesetting.machine.entity.Machine;
import org.springblade.mdm.basesetting.producedivision.entity.ProduceDivision;
import org.springblade.mdm.basesetting.producedivision.service.ProduceDivisionService;
import org.springblade.mdm.flow.constants.FlowContants;
import org.springblade.mdm.flow.entity.FlowProgramFile;
import org.springblade.mdm.program.entity.NcNode;
import org.springblade.mdm.program.service.NcNodeService;
-import org.springblade.mdm.program.service.NodeDeptQueryService;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
-import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/ProgramConfirmTableService.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/ProgramConfirmTableService.java
index 07a9bac..23113ee 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/ProgramConfirmTableService.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/ProgramConfirmTableService.java
@@ -2,13 +2,11 @@
package org.springblade.mdm.flow.service;
import com.itextpdf.text.*;
-import com.itextpdf.text.pdf.*;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springblade.core.oss.OssTemplate;
import org.springblade.core.tool.api.R;
-import org.springblade.core.tool.utils.DateUtil;
-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.basesetting.producedivision.entity.QinzheFgb;
import org.springblade.mdm.basesetting.producedivision.service.QinzheFgbService;
@@ -16,7 +14,6 @@
import org.springblade.mdm.commons.service.ParamService;
import org.springblade.mdm.commons.support.TemplatedPdfWriter;
import org.springblade.mdm.flow.vo.ApproveTableInfo;
-import org.springblade.mdm.program.entity.NcNode;
import org.springblade.mdm.program.service.NcNodeService;
import org.springblade.system.feign.IDictBizClient;
import org.springblade.system.feign.IUserClient;
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/ReplaceFlowService.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/ReplaceFlowService.java
index d3123a6..113283f 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/ReplaceFlowService.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/ReplaceFlowService.java
@@ -1,27 +1,19 @@
package org.springblade.mdm.flow.service;
import lombok.AllArgsConstructor;
-import org.apache.commons.lang3.StringUtils;
import org.flowable.engine.IdentityService;
import org.flowable.engine.RuntimeService;
import org.flowable.engine.TaskService;
import org.flowable.engine.runtime.ProcessInstance;
-import org.flowable.task.api.Task;
-import org.simpleframework.xml.core.Replace;
import org.springblade.core.log.exception.ServiceException;
import org.springblade.core.oss.OssTemplate;
import org.springblade.core.oss.model.BladeFile;
import org.springblade.core.secure.utils.AuthUtil;
-import org.springblade.mdm.basesetting.machine.MachineService;
-import org.springblade.mdm.basesetting.machine.entity.Machine;
-import org.springblade.mdm.basesetting.producedivision.entity.ProduceDivision;
-import org.springblade.mdm.basesetting.producedivision.service.ProduceDivisionService;
+import org.springblade.mdm.basesetting.machine.service.MachineService;
import org.springblade.mdm.flow.constants.FlowContants;
import org.springblade.mdm.flow.entity.FlowProgramFile;
-import org.springblade.mdm.flow.entity.ReplaceProgramFile;
import org.springblade.mdm.flow.vo.ReplaceFlowStartVO;
import org.springblade.mdm.flow.vo.ReplaceUploadVO;
-import org.springblade.mdm.flow.vo.TaskAssignVO;
import org.springblade.mdm.program.entity.NcNode;
import org.springblade.mdm.program.service.NcNodeService;
import org.springblade.mdm.program.service.NodeDeptQueryService;
@@ -30,16 +22,13 @@
import org.springblade.mdm.utils.EntityUtil;
import org.springblade.mdm.utils.ProgramFileNameCheckUtil;
import org.springframework.beans.BeanUtils;
-import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
-import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
-import java.util.stream.Collectors;
@AllArgsConstructor
@Service
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/gkw/programnode/service/ProgramNodeService.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/gkw/programnode/service/ProgramNodeService.java
index 55d800c..c592587 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/gkw/programnode/service/ProgramNodeService.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/gkw/programnode/service/ProgramNodeService.java
@@ -4,9 +4,8 @@
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springblade.core.mp.base.BizServiceImpl;
-import org.springblade.core.tool.api.R;
import org.springblade.core.tool.utils.Func;
-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.contants.ParamConstants;
import org.springblade.mdm.commons.service.ParamService;
@@ -15,10 +14,7 @@
import org.springblade.mdm.gkw.programnode.entity.TreeDept;
import org.springblade.mdm.gkw.programnode.mapper.ProgramNodeMapper;
import org.springblade.mdm.gkw.programnode.vo.ProgramNodeVO;
-import org.springblade.system.feign.ISysClient;
-import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
import java.util.*;
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/controller/FileMonitorRecordController.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/controller/FileMonitorRecordController.java
new file mode 100644
index 0000000..8c2e365
--- /dev/null
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/controller/FileMonitorRecordController.java
@@ -0,0 +1,60 @@
+
+package org.springblade.mdm.machinefile.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.springblade.core.mp.support.Condition;
+import org.springblade.core.tenant.annotation.NonDS;
+import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.DateUtil;
+import org.springblade.mdm.basesetting.producedivision.service.MdmDeptService;
+import org.springblade.mdm.machinefile.entity.FileMonitorRecord;
+import org.springblade.mdm.machinefile.service.FileMonitorRecordService;
+import org.springblade.mdm.machinefile.service.FileSendRecordService;
+import org.springblade.mdm.machinefile.vo.FileSendRecordQueryVO;
+import org.springblade.mdm.machinefile.vo.FileSendRecordVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.Date;
+
+/**
+ * 鏂囦欢涓嬪彂璁板綍
+ *
+ * @author yangys
+ */
+@NonDS
+@RestController
+@RequestMapping("/machinefile/monitorrecord")
+@Tag(name = "鏂囦欢鐩戞帶璁板綍", description = "鏂囦欢鐩戞帶璁板綍")
+@Slf4j
+public class FileMonitorRecordController {
+ @Autowired
+ private MdmDeptService mdmDeptService;
+ @Autowired
+ private FileMonitorRecordService fileMonitorRecordService;
+
+ @GetMapping("/page")
+ @Operation(summary = "宸ユ帶缃戠洰褰曟枃浠跺垪琛�", description = "宸ユ帶缃戠洰褰曟枃浠跺垪琛�")
+ public R<IPage<FileMonitorRecord>> page(FileSendRecordQueryVO query) {
+
+ Date end = null;
+ if(query.getCreateTimeEnd() != null) {
+ end = DateUtil.plusDays(query.getCreateTimeEnd(),1);
+ }
+
+ IPage<FileMonitorRecord> page = fileMonitorRecordService.lambdaQuery()
+ .like(StringUtils.isNotBlank(query.getName()),FileMonitorRecord::getName,query.getName())
+ .ge(query.getCreateTimeBegin()!=null,FileMonitorRecord::getCreateTime,query.getCreateTimeBegin())
+ .le(query.getCreateTimeEnd()!=null,FileMonitorRecord::getCreateTime,end)
+ .page(Condition.getPage(query));
+
+ return R.data(page);
+ }
+
+}
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/controller/FileSendRecordController.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/controller/FileSendRecordController.java
new file mode 100644
index 0000000..0209a43
--- /dev/null
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/controller/FileSendRecordController.java
@@ -0,0 +1,53 @@
+
+package org.springblade.mdm.machinefile.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import lombok.extern.slf4j.Slf4j;
+import org.springblade.core.tenant.annotation.NonDS;
+import org.springblade.core.tool.api.R;
+import org.springblade.mdm.basesetting.machine.entity.Machine;
+import org.springblade.mdm.basesetting.machine.service.MachineService;
+import org.springblade.mdm.basesetting.producedivision.entity.MdmDept;
+import org.springblade.mdm.basesetting.producedivision.service.MdmDeptService;
+import org.springblade.mdm.machinefile.entity.MachineFile;
+import org.springblade.mdm.machinefile.service.FileSendRecordService;
+import org.springblade.mdm.machinefile.service.MachineFileChangeHisService;
+import org.springblade.mdm.machinefile.service.MachineFileService;
+import org.springblade.mdm.machinefile.vo.*;
+import org.springblade.mdm.program.vo.CompareDataVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 鏂囦欢涓嬪彂璁板綍
+ *
+ * @author yangys
+ */
+@NonDS
+@RestController
+@RequestMapping("/machinefile/sendrecord")
+@Tag(name = "鏂囦欢涓嬪彂璁板綍", description = "鏂囦欢涓嬪彂璁板綍")
+@Slf4j
+public class FileSendRecordController {
+ @Autowired
+ private MdmDeptService mdmDeptService;
+ @Autowired
+ private FileSendRecordService fileSendRecordService;
+
+ @GetMapping("/file-page")
+ @Operation(summary = "宸ユ帶缃戠洰褰曟枃浠跺垪琛�", description = "宸ユ帶缃戠洰褰曟枃浠跺垪琛�")
+ public R<IPage<FileSendRecordVO>> page(FileSendRecordQueryVO query) {
+
+ return R.data(fileSendRecordService.pageQuery(query));
+ }
+
+}
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/controller/MachineAcceptedFileController.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/controller/MachineAcceptedFileController.java
index 6c638aa..83942fe 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/controller/MachineAcceptedFileController.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/controller/MachineAcceptedFileController.java
@@ -7,7 +7,7 @@
import lombok.extern.slf4j.Slf4j;
import org.springblade.core.excel.util.ExcelUtil;
import org.springblade.core.tool.utils.DateUtil;
-import org.springblade.mdm.basesetting.machine.MachineService;
+import org.springblade.mdm.basesetting.machine.service.MachineService;
import org.springblade.mdm.basesetting.producedivision.service.MdmDeptService;
import org.springblade.mdm.machinefile.entity.MachineFile;
import org.springblade.mdm.machinefile.service.MachineFileService;
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/controller/MachineCollectFileController.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/controller/MachineCollectFileController.java
index e6accdd..b9935e3 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/controller/MachineCollectFileController.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/controller/MachineCollectFileController.java
@@ -5,7 +5,7 @@
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.extern.slf4j.Slf4j;
import org.springblade.core.tool.api.R;
-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.basesetting.producedivision.entity.MdmDept;
import org.springblade.mdm.basesetting.producedivision.service.MdmDeptService;
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/controller/MachineFileController.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/controller/MachineFileController.java
index 3734fa7..4265b29 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/controller/MachineFileController.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/controller/MachineFileController.java
@@ -7,7 +7,7 @@
import lombok.extern.slf4j.Slf4j;
import org.springblade.core.tenant.annotation.NonDS;
import org.springblade.core.tool.api.R;
-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.basesetting.producedivision.entity.MdmDept;
import org.springblade.mdm.basesetting.producedivision.service.MdmDeptService;
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/entity/FileMonitorRecord.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/entity/FileMonitorRecord.java
new file mode 100644
index 0000000..c3e7b8c
--- /dev/null
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/entity/FileMonitorRecord.java
@@ -0,0 +1,50 @@
+package org.springblade.mdm.machinefile.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+import org.apache.commons.io.FileUtils;
+import org.springblade.core.mp.base.BizEntity;
+
+import java.util.Date;
+
+/**
+ * 鏈哄簥鏂囦欢涓嬪彂璁板綍
+ */
+@Setter
+@Getter
+@TableName("mdm_file_monitor_record")
+public class FileMonitorRecord {
+ public static final int EVENT_DELETE = 2;
+ public static final int EVENT_CREATE = 1;
+ /**
+ * 涓婚敭
+ */
+ @JsonSerialize(using = ToStringSerializer.class)
+ @Schema(description = "涓婚敭")
+ @TableId(value = "id", type = IdType.ASSIGN_ID)
+ private Long id;
+
+ /**
+ * 鏂囦欢鍚�
+ */
+ private String name;
+ /**
+ *鏂囦欢璺緞
+ */
+ private String dirPath;
+ /**
+ * 浜嬩欢绫诲瀷锛�1:鍒涘缓;2锛氫慨鏀�;3鍒犻櫎
+ */
+ private int eventType;
+ /**
+ * 涓氬姟鐘舵��
+ */
+ @Schema(description = "鍒涘缓鏃堕棿")
+ private Date createTime;
+}
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/entity/FileSendRecord.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/entity/FileSendRecord.java
new file mode 100644
index 0000000..2b1287e
--- /dev/null
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/entity/FileSendRecord.java
@@ -0,0 +1,42 @@
+package org.springblade.mdm.machinefile.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Getter;
+import lombok.Setter;
+import org.apache.commons.io.FileUtils;
+import org.springblade.core.mp.base.BizEntity;
+
+import java.util.Date;
+
+/**
+ * 鏈哄簥鏂囦欢涓嬪彂璁板綍
+ */
+@Setter
+@Getter
+@TableName("mdm_file_send_record")
+public class FileSendRecord extends BizEntity {
+
+ /**
+ * 鏂囦欢鍚�
+ */
+ private String name;
+
+
+ /**
+ * 鎵�灞炴満搴�
+ */
+ private String machineCode;
+ /**
+ * 鏂囦欢瀛楄妭鏁�
+ */
+ private Long fileSize;
+ /**
+ * 鐢熸垚鏂囦欢澶у皬鐨勬樉绀烘枃鏈�
+ * @return 鏄剧ず鏂囨湰
+ */
+ public String getFileSizeDisplay(){
+ return FileUtils.byteCountToDisplaySize(fileSize);
+ }
+
+
+}
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/filewatch/DirectorLockService.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/filewatch/DirectorLockService.java
new file mode 100644
index 0000000..8ba1ae0
--- /dev/null
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/filewatch/DirectorLockService.java
@@ -0,0 +1,40 @@
+package org.springblade.mdm.machinefile.filewatch;
+
+import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.jdbc.core.JdbcTemplate;
+import org.springframework.stereotype.Service;
+
+import java.io.File;
+import java.lang.management.ManagementFactory;
+
+
+@Slf4j
+@AllArgsConstructor
+@Service
+public class DirectorLockService {
+ private final JdbcTemplate jdbcTemplate;
+
+ public boolean acquireLock() {
+ int affect = 0;
+ try {
+ affect = jdbcTemplate.update(
+ "INSERT INTO mdm_file_locks (lock_id,locked_by, lock_time) " +
+ "VALUES (1,?, CURRENT_TIMESTAMP)",getInstanceId());
+ } catch (Exception e) {
+ log.info("鏂囦欢閿佸畾澶辫触锛屼笉杩涜鐩綍鐩戞帶",e);
+ }
+ return affect > 0;
+ }
+
+ public void releaseLock() {
+ jdbcTemplate.update(
+ "DELETE FROM mdm_file_locks");
+ }
+
+ private String getInstanceId() {
+ // 杩斿洖褰撳墠瀹炰緥鐨勫敮涓�鏍囪瘑
+ return ManagementFactory.getRuntimeMXBean().getName();
+ }
+
+}
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/filewatch/DynamicDirectoryWatcher.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/filewatch/DynamicDirectoryWatcher.java
new file mode 100644
index 0000000..dc78520
--- /dev/null
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/filewatch/DynamicDirectoryWatcher.java
@@ -0,0 +1,35 @@
+package org.springblade.mdm.machinefile.filewatch;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.nio.file.Path;
+import java.nio.file.WatchService;
+import java.util.Map;
+import java.util.Set;
+
+@Service
+public class DynamicDirectoryWatcher {
+ private final FileWatcherService fileWatcherService;
+
+ @Autowired
+ public DynamicDirectoryWatcher(FileWatcherService fileWatcherService) {
+ this.fileWatcherService = fileWatcherService;
+ }
+
+ public void addDirectory(Path directory, FileWatcherService.FileChangeListener listener) throws Exception {
+ fileWatcherService.watchDirectory(directory, listener);
+ }
+
+ public void removeDirectory(Path directory) throws Exception {
+ fileWatcherService.stopWatching(directory);
+ }
+
+ public Map<Path, WatchService> getWatchedDirectories() {
+
+ return fileWatcherService.getWatchedDirectories();
+ }
+
+ public boolean containsPath(Path path) {
+ return fileWatcherService.getWatchedDirectories().containsKey(path);
+ }
+}
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/filewatch/FileLockChecker.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/filewatch/FileLockChecker.java
new file mode 100644
index 0000000..daa7033
--- /dev/null
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/filewatch/FileLockChecker.java
@@ -0,0 +1,43 @@
+package org.springblade.mdm.machinefile.filewatch;
+import java.io.*;
+import java.nio.channels.FileChannel;
+import java.nio.channels.FileLock;
+import java.nio.file.Files;
+import java.nio.file.Path;
+/*
+鐩戞帶鏂囦欢鏄惁浼犺緭瀹屾垚锛堜娇鐢ㄥ彲鍚﹂攣瀹氭潵鍒ゆ柇锛�
+ */
+
+public class FileLockChecker {
+ public static boolean isFileCompletelyWritten(Path file) {
+ try (RandomAccessFile raf = new RandomAccessFile(file.toFile(), "rw");
+ FileChannel channel = raf.getChannel()) {
+
+ // 灏濊瘯鑾峰彇鐙崰閿�
+ FileLock lock = channel.tryLock();
+ if (lock != null) {
+ lock.release();
+ // 濡傛灉鑳借幏鍙栭攣锛岃鏄庢枃浠朵笉鍐嶈鍐欏叆
+ return true;
+ }
+ return false;
+ } catch (Exception e) {
+ // 濡傛灉鍙戠敓寮傚父锛屽彲鑳芥枃浠朵粛鍦ㄨ鍐欏叆
+ return false;
+ }
+ }
+
+ /**
+ * 鏂囦欢鏄惁浼犺緭瀹屾垚锛堥噰鐢ㄥ墠鍚庢枃浠跺ぇ灏忔瘮瀵规柟娉曪級
+ * @param file
+ * @return
+ * @throws IOException
+ * @throws InterruptedException
+ */
+ public static boolean isFileComplete(Path file) throws IOException, InterruptedException {
+ long initialSize = Files.size(file);
+ Thread.sleep(3000); // 绛夊緟1绉�
+ long currentSize = Files.size(file);
+ return initialSize == currentSize;
+ }
+}
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/filewatch/FileWatcherService.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/filewatch/FileWatcherService.java
new file mode 100644
index 0000000..ebd3d24
--- /dev/null
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/filewatch/FileWatcherService.java
@@ -0,0 +1,101 @@
+package org.springblade.mdm.machinefile.filewatch;
+
+import org.springframework.stereotype.Service;
+
+import java.io.IOException;
+import java.nio.file.*;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+
+import static java.nio.file.StandardWatchEventKinds.*;
+@Service
+public class FileWatcherService {
+
+ private final ExecutorService executor = Executors.newCachedThreadPool();
+ private final Map<Path, WatchService> watchServices = new HashMap<>();
+ private final Map<Path, FileChangeListener> listeners = new HashMap<>();
+
+ public interface FileChangeListener {
+ void onFileCreated(Path filePath);
+ void onFileModified(Path filePath);
+ void onFileDeleted(Path filePath);
+ }
+
+ public void watchDirectory(Path directory, FileChangeListener listener) throws IOException {
+ if (!Files.isDirectory(directory)) {
+ throw new IllegalArgumentException("Path must be a directory: " + directory);
+ }
+
+ if (watchServices.containsKey(directory)) {
+ throw new IllegalStateException("Directory is already being watched: " + directory);
+ }
+
+ WatchService watchService = FileSystems.getDefault().newWatchService();
+ directory.register(watchService, ENTRY_CREATE, ENTRY_MODIFY, ENTRY_DELETE);
+
+ watchServices.put(directory, watchService);
+ listeners.put(directory, listener);
+
+ executor.submit(() -> {
+ try {
+ while (true) {
+ WatchKey key = watchService.take();
+ for (WatchEvent<?> event : key.pollEvents()) {
+ WatchEvent.Kind<?> kind = event.kind();
+
+ @SuppressWarnings("unchecked")
+ WatchEvent<Path> ev = (WatchEvent<Path>) event;
+ Path fileName = ev.context();
+ Path fullPath = directory.resolve(fileName);
+
+ FileChangeListener currentListener = listeners.get(directory);
+ if (currentListener == null) break;
+
+ if (kind == ENTRY_CREATE) {
+ currentListener.onFileCreated(fullPath);
+ } else if (kind == ENTRY_MODIFY) {
+ currentListener.onFileModified(fullPath);
+ } else if (kind == ENTRY_DELETE) {
+ currentListener.onFileDeleted(fullPath);
+ }
+ }
+ boolean valid = key.reset();
+ if (!valid) {
+ break;
+ }
+ }
+ } catch (InterruptedException e) {
+ Thread.currentThread().interrupt();
+ } catch (ClosedWatchServiceException e) {
+ // Service was closed, exit normally
+ }
+ });
+ }
+
+ public void stopWatching(Path directory) throws IOException {
+ WatchService watchService = watchServices.remove(directory);
+ listeners.remove(directory);
+ if (watchService != null) {
+ watchService.close();
+ }
+ }
+
+ public void shutdown() {
+ executor.shutdownNow();
+ watchServices.values().forEach(watchService -> {
+ try {
+ watchService.close();
+ } catch (IOException e) {
+ // Ignore on shutdown
+ }
+ });
+ watchServices.clear();
+ listeners.clear();
+ }
+
+ public Map<Path, WatchService> getWatchedDirectories(){
+ return this.watchServices;
+ }
+}
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/filewatch/MachineFileChangeListener.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/filewatch/MachineFileChangeListener.java
new file mode 100644
index 0000000..d248c18
--- /dev/null
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/filewatch/MachineFileChangeListener.java
@@ -0,0 +1,108 @@
+package org.springblade.mdm.machinefile.filewatch;
+
+import com.alibaba.excel.util.StringUtils;
+import lombok.extern.slf4j.Slf4j;
+import org.springblade.core.tool.utils.SpringUtil;
+import org.springblade.mdm.basesetting.machine.entity.Machine;
+import org.springblade.mdm.machinefile.entity.FileMonitorRecord;
+import org.springblade.mdm.machinefile.entity.MachineFile;
+import org.springblade.mdm.machinefile.service.FileMonitorRecordService;
+import org.springblade.mdm.machinefile.service.MachineFileScanService;
+import org.springblade.mdm.machinefile.service.MachineFileService;
+import org.springblade.mdm.program.service.ProgramAnnotationService;
+
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.nio.file.Path;
+import java.util.Date;
+
+@Slf4j
+public class MachineFileChangeListener implements FileWatcherService.FileChangeListener{
+ private final MachineFileService machineFileService;
+ ProgramAnnotationService programAnnotationService;
+ private final Machine machine;
+ private final String dirType;
+ public MachineFileChangeListener(MachineFileService aMachineFileService, ProgramAnnotationService annotationService, WatchInfo info) {
+ this.machineFileService = aMachineFileService;
+ this.machine = info.getMachine();
+ this.dirType = info.getDirType();
+ this.programAnnotationService = annotationService;
+ }
+ @Override
+ public void onFileCreated(Path filePath) {
+
+ try {
+ log.info("鏂囦欢鍒涘缓{},mcode={},dieType={}",filePath,machine.getCode(),dirType);
+ if(FileLockChecker.isFileComplete(filePath)){
+ MachineFileScanService fileScanService = SpringUtil.getBean(MachineFileScanService.class);
+ MachineFile mf = fileScanService.readFileToMachineFile(filePath,this.machine,this.dirType,programAnnotationService.getAnnotionDictList());
+ machineFileService.refreshFileData(mf);
+ }
+ saveMonitor(filePath,FileMonitorRecord.EVENT_CREATE);
+ } catch (InterruptedException e) {
+ log.error("sleep鍑洪敊",e);
+ } catch (IOException e) {
+ log.error("鏈哄簥鏂囦欢鐩戞帶created寮傚父",e);
+ }catch (Exception e) {
+ log.error("鏈哄簥鍥炰紶鏂囦欢澶勭悊寮傚父create",e);
+ }
+ }
+
+
+ @Override
+ public void onFileModified(Path filePath) {
+ //鏂囦欢淇敼
+ log.info("鏂囦欢淇敼:{}",filePath);
+ try {
+ if(FileLockChecker.isFileComplete(filePath)){
+ log.info("鏂囦欢浼犺緭瀹屾垚{}",filePath);
+ MachineFileScanService fileScanService = SpringUtil.getBean(MachineFileScanService.class);
+ MachineFile mf = fileScanService.readFileToMachineFile(filePath,this.machine,this.dirType,programAnnotationService.getAnnotionDictList());
+ machineFileService.refreshFileData(mf);
+ }else{
+ log.warn("鏂囦欢浼犺緭涓紝鍚庣画鍐嶆搷浣渰}",filePath);
+ }
+ } catch (IOException e) {
+ log.error("鍥炰紶鏂囦欢鎿嶄綔IO閿欒",e);
+ throw new RuntimeException(e);
+ } catch (InterruptedException e) {
+ log.error("sleep鍑洪敊",e);
+ } catch (Exception e) {
+ log.error("鏈哄簥鍥炰紶鏂囦欢澶勭悊寮傚父",e);
+ }
+ }
+
+ @Override
+ public void onFileDeleted(Path filePath) {
+ String path = filePath.toString();
+ log.info("鏂囦欢鍒犻櫎{}",filePath);
+
+ try {
+
+ String name = filePath.getFileName().toString();
+
+ saveMonitor(filePath,FileMonitorRecord.EVENT_DELETE);
+
+ MachineFile fileInDb = machineFileService.getExistsFile(name,this.dirType,this.machine.getCode());
+ if(fileInDb != null){
+ fileInDb.markFileDeleted();
+ machineFileService.updateById(fileInDb);
+ }else{
+ log.info("鏁版嵁搴撳唴涓嶅瓨鍦ㄦ枃浠秢}",filePath);
+ }
+ } catch (Exception e) {
+ log.error("鏈哄簥鍥炰紶鏂囦欢onDelete澶勭悊寮傚父",e);
+ }
+ }
+
+ void saveMonitor(Path filePath,int eventType){
+ FileMonitorRecordService fileMonitorRecordService = SpringUtil.getBean(FileMonitorRecordService.class);
+ FileMonitorRecord monitorRecord = new FileMonitorRecord();
+ monitorRecord.setName(filePath.getFileName().toString());
+ monitorRecord.setDirPath(filePath.getParent().toString());
+
+ monitorRecord.setEventType(eventType);
+ monitorRecord.setCreateTime(new Date());
+ fileMonitorRecordService.save(monitorRecord);
+ }
+}
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/filewatch/WatchInfo.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/filewatch/WatchInfo.java
new file mode 100644
index 0000000..46995bf
--- /dev/null
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/filewatch/WatchInfo.java
@@ -0,0 +1,15 @@
+package org.springblade.mdm.machinefile.filewatch;
+
+import lombok.EqualsAndHashCode;
+import lombok.Getter;
+import lombok.Setter;
+import org.springblade.mdm.basesetting.machine.entity.Machine;
+
+@Setter
+@Getter
+@EqualsAndHashCode
+public class WatchInfo {
+ private Machine machine;
+ private String dirType;
+ private String path;
+}
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/mapper/FileMonitorRecordMapper.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/mapper/FileMonitorRecordMapper.java
new file mode 100644
index 0000000..9ccb3c6
--- /dev/null
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/mapper/FileMonitorRecordMapper.java
@@ -0,0 +1,20 @@
+package org.springblade.mdm.machinefile.mapper;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.apache.ibatis.annotations.Param;
+import org.springblade.core.mp.mapper.BladeMapper;
+import org.springblade.mdm.machinefile.entity.FileMonitorRecord;
+import org.springblade.mdm.machinefile.entity.FileSendRecord;
+import org.springblade.mdm.machinefile.vo.FileSendRecordQueryVO;
+import org.springblade.mdm.machinefile.vo.FileSendRecordVO;
+
+public interface FileMonitorRecordMapper extends BladeMapper<FileMonitorRecord> {
+ /**
+ * 鍒嗛〉鎷嗙嚎鍛㈣褰�
+ * @param page
+ * @param query
+ * @return
+ */
+ //IPage<FileMonitorRecordVO> pageQuery(IPage<FileMonitorRecordVO> page, @Param("query")FileMonitorRecordQueryVO query);
+
+}
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/mapper/FileMonitorRecordMapper.xml b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/mapper/FileMonitorRecordMapper.xml
new file mode 100644
index 0000000..3e4aed3
--- /dev/null
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/mapper/FileMonitorRecordMapper.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.springblade.mdm.machinefile.mapper.FileMonitorRecordMapper">
+ <resultMap id="BaseResultMap" type="org.springblade.mdm.machinefile.entity.FileMonitorRecord">
+ <id column="id" property="id"/>
+ <result column="name" property="name"/>
+ <result column="create_time" property="createTime"/>
+ </resultMap>
+
+</mapper>
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/mapper/FileSendRecordMapper.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/mapper/FileSendRecordMapper.java
new file mode 100644
index 0000000..a19ed38
--- /dev/null
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/mapper/FileSendRecordMapper.java
@@ -0,0 +1,19 @@
+package org.springblade.mdm.machinefile.mapper;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.apache.ibatis.annotations.Param;
+import org.springblade.core.mp.mapper.BladeMapper;
+import org.springblade.mdm.machinefile.entity.FileSendRecord;
+import org.springblade.mdm.machinefile.vo.FileSendRecordQueryVO;
+import org.springblade.mdm.machinefile.vo.FileSendRecordVO;
+
+public interface FileSendRecordMapper extends BladeMapper<FileSendRecord> {
+ /**
+ * 鍒嗛〉鎷嗙嚎鍛㈣褰�
+ * @param page
+ * @param query
+ * @return
+ */
+ IPage<FileSendRecordVO> pageQuery(IPage<FileSendRecordVO> page, @Param("query")FileSendRecordQueryVO query);
+
+}
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/mapper/FileSendRecordMapper.xml b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/mapper/FileSendRecordMapper.xml
new file mode 100644
index 0000000..73cd15e
--- /dev/null
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/mapper/FileSendRecordMapper.xml
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.springblade.mdm.machinefile.mapper.FileSendRecordMapper">
+ <resultMap id="BaseResultMap" type="org.springblade.mdm.machinefile.entity.FileSendRecord">
+ <id column="id" property="id"/>
+ <result column="name" property="name"/>
+ <result column="status" property="status"/>
+ <result column="create_time" property="createTime"/>
+ <result column="update_time" property="updateTime"/>
+ <result column="is_deleted" property="isDeleted"/>
+ </resultMap>
+
+ <!--鏂囦欢璁板綍鏌ヨ-->
+
+ <select id="pageQuery" resultType="org.springblade.mdm.machinefile.vo.FileSendRecordVO">
+ select f.id,f.name,f.machine_code,f.file_size,f.create_time,f.update_time,u.name create_user_name
+ from mdm_file_send_record f left join blade_user u on f.create_user=u.id
+ <where>
+ f.is_deleted=0
+
+ <if test="query.name!=null and query.name!=''">
+ and f.name like CONCAT('%', #{query.name,jdbcType=VARCHAR},'%')
+ </if>
+
+ <if test="query.machineCode!=null and query.machineCode!=''">
+ and f.machine_code= #{query.machineCode,jdbcType=VARCHAR}
+ </if>
+ <if test="query.createTimeBegin!=null">
+ and h.create_time >=#{query.createTimeBegin}
+ </if>
+ <if test="query.createTimeEnd!=null">
+ and h.create_time <=#{query.createTimeEnd}
+ </if>
+ <!--
+ <if test="query.deptIds!=null and query.deptIds.size()>0">
+ and m.owner_dept in
+ <foreach item="item" collection="query.deptIds" open="(" separator="," close=")">
+ #{item}
+ </foreach>
+ </if>
+ -->
+ </where>
+ order by f.create_time desc
+ </select>
+</mapper>
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/mapper/MachineFileMapper.xml b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/mapper/MachineFileMapper.xml
index 827b5c2..abe01bd 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/mapper/MachineFileMapper.xml
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/mapper/MachineFileMapper.xml
@@ -68,7 +68,7 @@
select f.id,f.name,f.machine_code,f.file_create_time, f.file_modify_time,f.md5,f.file_size,f.create_time,f.update_time
from mdm_machine_file f join mdm_machine m on f.machine_code=m.code and m.is_deleted=0
<where>
- f.is_deleted=0
+ f.is_deleted=0 and f.status <> 4
<if test="query.name!=null and query.name!=''">
and f.name like CONCAT('%', #{query.name,jdbcType=VARCHAR},'%')
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/service/FileMonitorRecordService.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/service/FileMonitorRecordService.java
new file mode 100644
index 0000000..7e81c15
--- /dev/null
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/service/FileMonitorRecordService.java
@@ -0,0 +1,25 @@
+
+package org.springblade.mdm.machinefile.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springblade.core.mp.base.BizServiceImpl;
+import org.springblade.core.mp.support.Condition;
+import org.springblade.mdm.machinefile.entity.FileMonitorRecord;
+import org.springblade.mdm.machinefile.mapper.FileMonitorRecordMapper;
+import org.springframework.stereotype.Service;
+
+/**
+ * 鏈哄簥鏂囦欢
+ *
+ * @author yangys
+ */
+@Slf4j
+@Service
+@AllArgsConstructor
+public class FileMonitorRecordService extends ServiceImpl<FileMonitorRecordMapper, FileMonitorRecord> {
+
+
+}
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/service/FileSendRecordService.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/service/FileSendRecordService.java
new file mode 100644
index 0000000..92aa34c
--- /dev/null
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/service/FileSendRecordService.java
@@ -0,0 +1,32 @@
+
+package org.springblade.mdm.machinefile.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.springblade.core.log.exception.ServiceException;
+import org.springblade.core.mp.base.BizServiceImpl;
+import org.springblade.core.mp.support.Condition;
+import org.springblade.mdm.machinefile.entity.FileSendRecord;
+import org.springblade.mdm.machinefile.mapper.FileSendRecordMapper;
+import org.springblade.mdm.machinefile.vo.FileSendRecordQueryVO;
+import org.springblade.mdm.machinefile.vo.FileSendRecordVO;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+/**
+ * 鏈哄簥鏂囦欢
+ *
+ * @author yangys
+ */
+@Slf4j
+@Service
+@AllArgsConstructor
+public class FileSendRecordService extends BizServiceImpl<FileSendRecordMapper, FileSendRecord> {
+
+
+ public IPage<FileSendRecordVO> pageQuery(FileSendRecordQueryVO query) {
+ return baseMapper.pageQuery(Condition.getPage(query),query);
+ }
+}
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/service/MachineFileScanService.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/service/MachineFileScanService.java
new file mode 100644
index 0000000..f12198e
--- /dev/null
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/service/MachineFileScanService.java
@@ -0,0 +1,288 @@
+package org.springblade.mdm.machinefile.service;
+
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.codec.digest.DigestUtils;
+import org.springblade.core.log.exception.ServiceException;
+import org.springblade.mdm.basesetting.machine.service.MachineService;
+import org.springblade.mdm.basesetting.machine.entity.Machine;
+import org.springblade.mdm.commons.service.ParamService;
+import org.springblade.mdm.machinefile.entity.MachineFile;
+import org.springblade.mdm.program.service.ProgramAnnotationService;
+import org.springblade.mdm.utils.FileContentUtil;
+import org.springblade.system.pojo.entity.DictBiz;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.io.BufferedInputStream;
+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.attribute.BasicFileAttributes;
+import java.nio.file.attribute.FileTime;
+import java.util.Date;
+import java.util.List;
+
+@Slf4j
+@Component
+public class MachineFileScanService {
+ @Autowired
+ private MachineFileService machineFileService;
+ @Autowired
+ private MachineService machineService;
+ @Autowired
+ private ParamService paramService;
+ @Autowired
+ private ProgramAnnotationService programAnnotationService;
+
+
+ /**
+ * 鎵弿鎵�鏈夋満搴婄殑閰嶇疆鐩綍
+ */
+ public void scanMachineFile() {
+ List<Machine> machines = machineService.getEnableMachines();
+ for (Machine machine : machines) {
+
+ //鎵弿鏂版枃浠�
+ try {
+ scanDir(machine,MachineFile.DIR_TYPE_REC);
+ }catch(Exception e) {
+ log.error("REC鎵弿鏂囦欢寮傚父,鏈哄簥{}", machine.getCode(), e);
+ }
+ try {
+ scanDir(machine,MachineFile.DIR_TYPE_SEND);
+ }catch(Exception e) {
+ log.error("SEND鎵弿鏂囦欢寮傚父,鏈哄簥{}", machine.getCode(), e);
+ }
+ try {
+ scanDir(machine,MachineFile.DIR_TYPE_TEMP);
+ }catch(Exception e) {
+ log.error("TEMP鎵弿鏂囦欢寮傚父,鏈哄簥{}", machine.getCode(), e);
+ }
+
+ //娓呯悊鏁版嵁搴擄紝鍒犻櫎鏂囦欢涓嶅瓨鍦ㄧ殑鏁版嵁
+ try {
+ clearDeletedRecords(machine,MachineFile.DIR_TYPE_REC);
+ }catch(Exception e) {
+ log.error("REC鎵弿鏂囦欢寮傚父,鏈哄簥{}", machine.getCode(), e);
+ }
+ try {
+ clearDeletedRecords(machine,MachineFile.DIR_TYPE_SEND);
+ }catch(Exception e) {
+ log.error("SEND鎵弿鏂囦欢寮傚父,鏈哄簥{}", machine.getCode(), e);
+ }
+ try {
+ clearDeletedRecords(machine,MachineFile.DIR_TYPE_TEMP);
+ }catch(Exception e) {
+ log.error("TEMP鎵弿鏂囦欢寮傚父,鏈哄簥{}", machine.getCode(), e);
+ }
+ }
+
+ }
+
+
+ /**
+ * 鎵弿鐩綍
+ * @param machine 鏈哄簥淇℃伅
+ * @param dirType 鐩綍绫诲瀷
+ * @throws IOException
+ */
+ public void scanDir(Machine machine,String dirType) throws IOException {
+ String basePath = MachineFileService.getBasePath(machine,dirType);
+ if(basePath == null) {
+ log.warn("鐩綍绫诲瀷涓嶅尮閰�:{}",dirType);
+ return;
+ }
+ Path dirPath = Paths.get(basePath);
+ if(!dirPath.toFile().exists()){
+ log.warn("鎵弿鐩綍:{} 涓嶅瓨鍦�",dirPath);
+ return;
+ }
+ // 鍙寘鍚櫘閫氭枃浠�
+ List<Path> files = Files.list(dirPath)
+ .filter(Files::isRegularFile).toList();
+
+ byte[] buffer = new byte[2048];
+
+ //MachineFile existFileInDb;
+ List<DictBiz> annotatiionList = programAnnotationService.getAnnotionDictList();
+ //boolean exists;//鏂囦欢鏄惁瀛樺湪浜庢暟鎹簱涓�
+ for (Path filePath : files) {
+ //existFileInDb = null;
+ //exists = false;
+
+ /*MachineFile mf = new MachineFile();
+ mf.setTenantId("000000");
+ mf.setName(filePath.toFile().getName());
+ mf.setDirType(dirType);
+ mf.setMachineCode(machine.getCode());*/
+
+ try {
+ //璇诲彇鍐呭锛岀‘瀹氱▼搴忕姸鎬�
+ /*int pstatus = readProgramStatus(filePath,machine.getMachineGroupCode(),annotatiionList);
+ mf.setProgramStatus(pstatus);
+ BasicFileAttributes attrs = Files.readAttributes(
+ filePath,
+ BasicFileAttributes.class
+ );
+
+ FileTime creationTime = attrs.creationTime();
+ Date creationDate = new Date(creationTime.toMillis());
+ mf.setFileCreateTime(creationDate);
+
+ FileTime modifyTime = attrs.lastModifiedTime();
+ mf.setFileModifyTime(new Date(modifyTime.toMillis()));
+ mf.setFileSize(Files.size(filePath));
+ try (InputStream inputStream = Files.newInputStream(filePath)) {
+ // 浣跨敤杈撳叆娴佽鍙栨枃浠跺唴瀹�
+ int bytesRead = inputStream.read(buffer);
+ mf.setMd5(DigestUtils.md5Hex(buffer));
+ } catch (IOException e) {
+ log.error("璇诲彇鏂囦欢md5澶辫触",e);
+ continue;//鏈夐敊璇�,鎺犺繃
+ }*/
+
+ MachineFile mf = readFileToMachineFile(filePath,machine,dirType,annotatiionList);
+
+ machineFileService.refreshFileData(mf);
+ /*
+ existFileInDb = machineFileService.getExistsFile(mf.getName(),dirType,machine.getCode());
+ System.out.println("鏂囦欢鍒涘缓鏃堕棿: " + mf.getFileCreateTime());
+
+ if(existFileInDb == null) {
+ machineFileService.save(mf);
+ }else{
+ log.info("鏂囦欢宸插瓨鍦�:{}",filePath.getFileName());
+
+ existFileInDb.setFileSize(mf.getFileSize());
+ existFileInDb.setProgramStatus(mf.getProgramStatus());
+ existFileInDb.setFileCreateTime(mf.getFileCreateTime());
+ existFileInDb.setFileModifyTime(mf.getFileModifyTime());
+ if(!StringUtils.equals(existFileInDb.getMd5(),mf.getMd5())){
+ //鏂囦欢鍐呭鍙戠敓鍙樺寲浜�,璁剧疆鐘舵�佷负鍒濆鐘舵��
+ existFileInDb.setStatus(MachineFile.STATUS_NORMAL);
+ }
+ existFileInDb.setMd5(mf.getMd5());
+
+ machineFileService.updateById(existFileInDb);
+
+ }*/
+ } catch (IOException e) {
+ log.error("璇诲彇鏂囦欢淇℃伅澶辫触",e);
+ }
+
+ }
+ }
+
+ /**
+ * 璇诲彇纾佺洏涓婄殑鏂囦欢淇℃伅
+ * @param filePath 鏂囦欢璺緞
+ * @param machine 鏈哄櫒
+ * @param dirType 鐩綍绫诲瀷
+ * @param annotatiionList 娉ㄨВ閰嶇疆瀛楀吀 鐢ㄤ簬璇诲彇绋嬪簭鐘舵��
+ * @return MachineFile 瀹炰緥
+ * @throws IOException
+ */
+ public MachineFile readFileToMachineFile(Path filePath,Machine machine,String dirType,List<DictBiz> annotatiionList) throws IOException {
+ MachineFile mf = new MachineFile();
+
+ mf.setTenantId("000000");
+ mf.setName(filePath.toFile().getName());
+ mf.setDirType(dirType);
+ mf.setMachineCode(machine.getCode());
+ mf.setProgramStatus(readProgramStatus(filePath,machine.getMachineGroupCode(),annotatiionList));
+
+ BasicFileAttributes attrs = Files.readAttributes(
+ filePath,
+ BasicFileAttributes.class
+ );
+
+ FileTime creationTime = attrs.creationTime();
+ Date creationDate = new Date(creationTime.toMillis());
+ mf.setFileCreateTime(creationDate);
+
+ FileTime modifyTime = attrs.lastModifiedTime();
+ mf.setFileModifyTime(new Date(modifyTime.toMillis()));
+ mf.setFileSize(Files.size(filePath));
+
+ byte[] buffer = new byte[2048];
+ try (InputStream inputStream = Files.newInputStream(filePath)) {
+ // 浣跨敤杈撳叆娴佽鍙栨枃浠跺唴瀹�
+ inputStream.read(buffer);
+ mf.setMd5(DigestUtils.md5Hex(buffer));
+ } catch (IOException e) {
+ log.error("璇诲彇鏂囦欢md5澶辫触",e);
+ throw new ServiceException("璇诲彇鏂囦欢md5澶辫触"+e.getMessage());
+ }
+
+ return mf;
+ }
+ /**
+ * 璇诲彇鏂囦欢涓殑绋嬪簭鐘舵��
+ * @param filePath 鏂囦欢璺緞
+ * @param machineGroupCode
+ * @param annotatiionList 娉ㄩ噴閰嶇疆瀛楀吀
+ * @return 鐘舵�佺殑鏁存暟涔嬪拰
+ * @throws IOException
+ */
+ int readProgramStatus(Path filePath,String machineGroupCode,List<DictBiz> annotatiionList) throws IOException {
+ int programStatus = MachineFile.PROGRAM_STATUS_UNKNOWN;
+ try(InputStream ins = Files.newInputStream(filePath);
+ BufferedInputStream bis = new BufferedInputStream(ins)){
+
+ boolean isText= FileContentUtil.isTextFile(bis);
+ if(!isText){
+ return MachineFile.PROGRAM_STATUS_UNKNOWN;
+ }
+ bis.reset();
+ String statusLine = FileContentUtil.readLineAt(ins,ProgramAnnotationService.STATUS_LINE_INDEX);
+ if(programAnnotationService.isAnnotation(statusLine,machineGroupCode,annotatiionList)){
+ String progStatusTxt = programAnnotationService.removeAnnotation(machineGroupCode,statusLine,annotatiionList);
+ if(ProgramAnnotationService.SQ.equals(progStatusTxt)){
+ programStatus = MachineFile.PROGRAM_STATUS_TRY;
+ }else if(ProgramAnnotationService.GH.equals(progStatusTxt)){
+ programStatus = MachineFile.PROGRAM_STATUS_CURED;
+ }else if(ProgramAnnotationService.PL.equals(progStatusTxt)){
+ programStatus = MachineFile.PROGRAM_STATUS_DIVIASTION;
+ }
+ }
+ }
+
+ return programStatus;
+ }
+
+ /**
+ * 娓呯悊宸茬粡鍒犻櫎浜嗘枃浠剁殑璁板綍
+ * @param machine
+ * @param dirType
+ * @throws IOException
+ */
+ void clearDeletedRecords(Machine machine,String dirType) throws IOException {
+ List<MachineFile> machineFiles = this.machineFileService.lambdaQuery().eq(MachineFile::getDirType,dirType)
+ .eq(MachineFile::getMachineCode,machine.getCode()).list();
+
+ String basePath = MachineFileService.getBasePath(machine,dirType);
+ if(basePath == null) {
+ log.warn("鐩綍绫诲瀷涓嶅尮閰�:{}",dirType);
+ return;
+ }
+ Path dirPath = Paths.get(basePath);
+ if(!dirPath.toFile().exists()){
+ log.warn("鎵弿鐩綍:{} 涓嶅瓨鍦�",dirPath);
+ return;
+ }
+
+ List<Path> files = Files.list(dirPath)
+ .filter(Files::isRegularFile).toList();
+
+ for(MachineFile mf : machineFiles){
+ long findCount = files.stream().filter(filePath -> filePath.toFile().getName().equals(mf.getName())).count();
+ if(findCount == 0){
+ //鏂囦欢澶瑰唴娌℃壘鍒帮紝闇�瑕佸垹闄よ褰�
+ mf.markFileDeleted();
+ this.machineFileService.updateById(mf);
+ }
+ }
+ }
+}
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/service/MachineFileService.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/service/MachineFileService.java
index b62643e..d6f7507 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/service/MachineFileService.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/service/MachineFileService.java
@@ -11,15 +11,13 @@
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.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.utils.FileContentUtil;
import org.springframework.stereotype.Service;
@@ -206,4 +204,35 @@
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());
+ 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);
+ }
}
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/vo/FileMonitorRecordVO.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/vo/FileMonitorRecordVO.java
new file mode 100644
index 0000000..e6ebb08
--- /dev/null
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/vo/FileMonitorRecordVO.java
@@ -0,0 +1,15 @@
+package org.springblade.mdm.machinefile.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+import org.springblade.mdm.commons.vo.BaseVO;
+
+@Schema(description = "鏂囦欢鐩戞帶璁板綍VO")
+@Setter
+@Getter
+public class FileMonitorRecordVO extends BaseVO {
+ @Schema(description = "鏂囦欢鍚嶇О")
+ private String name;
+
+}
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/vo/FileSendRecordQueryVO.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/vo/FileSendRecordQueryVO.java
new file mode 100644
index 0000000..d12a7ae
--- /dev/null
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/vo/FileSendRecordQueryVO.java
@@ -0,0 +1,27 @@
+package org.springblade.mdm.machinefile.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+import org.springblade.core.mp.support.Query;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 鍒嗛〉鎷嗙嚎鍛�
+ */
+
+@Schema(description = "鏂囦欢涓嬪彂璁板綍鏌ヨ瀵硅薄")
+@Setter
+@Getter
+public class FileSendRecordQueryVO extends Query {
+ @Schema(description = "鏂囦欢鍚嶇О")
+ private String name;
+ @Schema(description = "鏈哄簥缂栫爜")
+ private String machineCode;
+ @Schema(description = "涓嬪彂鏃堕棿寮�濮�")
+ private Date createTimeBegin;
+ @Schema(description = "涓嬪彂鏃堕棿鎴")
+ private Date createTimeEnd;
+}
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/vo/FileSendRecordVO.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/vo/FileSendRecordVO.java
new file mode 100644
index 0000000..470158a
--- /dev/null
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/vo/FileSendRecordVO.java
@@ -0,0 +1,20 @@
+package org.springblade.mdm.machinefile.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+import org.springblade.mdm.commons.vo.BaseVO;
+
+import java.util.Date;
+
+@Schema(description = "鏂囦欢涓嬪彂璁板綍VO")
+@Setter
+@Getter
+public class FileSendRecordVO extends BaseVO {
+ @Schema(description = "鏂囦欢鍚嶇О")
+ private String name;
+ @Schema(description = "鏈哄簥缂栧彿/鍥炰紶鏈哄簥")
+ private String machineCode;
+
+
+}
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/MdmProgramImportService.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/MdmProgramImportService.java
index 29b2d15..92a5183 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/MdmProgramImportService.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/MdmProgramImportService.java
@@ -6,19 +6,17 @@
import org.apache.commons.io.FileUtils;
import org.apache.commons.lang3.StringUtils;
import org.springblade.core.log.exception.ServiceException;
-import org.springblade.core.mp.base.BizEntity;
import org.springblade.core.mp.base.BizServiceImpl;
import org.springblade.core.redis.cache.BladeRedis;
import org.springblade.core.secure.utils.AuthUtil;
import org.springblade.core.tool.utils.Func;
-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.program.entity.NcProgramExchange;
import org.springblade.mdm.program.mapper.NcProgramExchangeMapper;
import org.springblade.mdm.program.vo.MdmProgramImportVO;
import org.springblade.mdm.utils.FileContentUtil;
import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.scheduling.support.SimpleTriggerContext;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcNodeService.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcNodeService.java
index 5d4b143..05a0e8a 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcNodeService.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcNodeService.java
@@ -5,7 +5,7 @@
import lombok.extern.slf4j.Slf4j;
import org.springblade.core.mp.base.BizServiceImpl;
import org.springblade.core.tool.utils.Func;
-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.program.entity.NcNode;
import org.springblade.mdm.program.mapper.NcNodeMapper;
@@ -18,7 +18,6 @@
import java.util.List;
import java.util.Objects;
import java.util.Optional;
-import java.util.stream.Collectors;
/**
* 绋嬪簭鑺傜偣
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcProgramExportDNCService.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcProgramExportDNCService.java
index 5429e1e..1144346 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcProgramExportDNCService.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcProgramExportDNCService.java
@@ -2,28 +2,21 @@
package org.springblade.mdm.program.service;
import com.alibaba.csp.sentinel.util.StringUtil;
-import com.baomidou.mybatisplus.core.metadata.IPage;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.FilenameUtils;
import org.apache.commons.lang3.StringUtils;
import org.springblade.core.log.exception.ServiceException;
import org.springblade.core.mp.base.BizServiceImpl;
-import org.springblade.core.mp.support.Condition;
-import org.springblade.core.mp.support.Query;
import org.springblade.core.oss.OssTemplate;
-import org.springblade.core.tool.api.R;
-import org.springblade.core.tool.utils.Func;
-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.flow.entity.FlowProgramFile;
-import org.springblade.mdm.flow.service.ApproveRecordService;
import org.springblade.mdm.flow.service.FlowProgramFileService;
import org.springblade.mdm.program.entity.NcNode;
import org.springblade.mdm.program.entity.NcProgramApproved;
import org.springblade.mdm.program.entity.NcProgramExchange;
import org.springblade.mdm.program.mapper.NcProgramExchangeMapper;
-import org.springblade.mdm.program.vo.DncSendBackData;
import org.springblade.system.feign.IDictClient;
import org.springblade.system.pojo.entity.DictBiz;
import org.springframework.stereotype.Service;
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcProgramService.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcProgramService.java
index c105bf8..dfe1fef 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcProgramService.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcProgramService.java
@@ -28,25 +28,21 @@
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.FileUtils;
-import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.StringUtils;
-import org.flowable.engine.*;
import org.springblade.core.mp.base.BizServiceImpl;
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.program.entity.NcNode;
import org.springblade.mdm.program.entity.ProgramSeq;
import org.springblade.mdm.program.mapper.NcProgramMapper;
import org.springblade.mdm.program.entity.NcProgram;
import org.springblade.mdm.program.mapper.ProgramSeqMapper;
-import org.springblade.mdm.program.vo.DncSendBackData;
import org.springblade.mdm.program.vo.NcNodeProgramQueryVO;
import org.springblade.mdm.program.vo.NcProgramUploadVO;
import org.springblade.mdm.program.vo.NcProgramVO;
@@ -58,7 +54,6 @@
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
-import java.nio.charset.StandardCharsets;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.List;
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NodeDeptQueryService.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NodeDeptQueryService.java
index e59ed5e..066f0cd 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NodeDeptQueryService.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NodeDeptQueryService.java
@@ -5,7 +5,7 @@
import lombok.extern.slf4j.Slf4j;
import org.springblade.core.tool.api.R;
import org.springblade.core.tool.utils.Func;
-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.system.feign.ISysClient;
import org.springblade.system.pojo.entity.Dept;
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/ProcessProgRefService.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/ProcessProgRefService.java
index 48243f4..ad0c4e5 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/ProcessProgRefService.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/ProcessProgRefService.java
@@ -25,40 +25,16 @@
*/
package org.springblade.mdm.program.service;
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
-import org.apache.commons.io.IOUtils;
import org.springblade.core.mp.base.BizServiceImpl;
-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.entity.Machine;
-import org.springblade.mdm.flow.excution.StartDispatcher;
import org.springblade.mdm.flow.service.FlowCommonService;
-import org.springblade.mdm.program.entity.NcNode;
-import org.springblade.mdm.program.entity.NcProgram;
import org.springblade.mdm.program.entity.ProcessProgRef;
-import org.springblade.mdm.program.entity.ProgramSeq;
-import org.springblade.mdm.program.mapper.NcProgramMapper;
import org.springblade.mdm.program.mapper.ProcessProgRefMapper;
-import org.springblade.mdm.program.mapper.ProgramSeqMapper;
-import org.springblade.mdm.program.vo.NcNodeProgramQueryVO;
-import org.springblade.mdm.program.vo.NcProgramUploadVO;
import org.springblade.mdm.program.vo.NcProgramVO;
-import org.springblade.mdm.utils.FileContentUtil;
-import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
-import org.springframework.web.multipart.MultipartFile;
-import java.io.IOException;
-import java.io.InputStream;
-import java.nio.charset.StandardCharsets;
-import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.List;
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/task/MachineFileScanTask.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/task/MachineFileScanTask.java
index 0abac7a..ff090f8 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/task/MachineFileScanTask.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/task/MachineFileScanTask.java
@@ -1,29 +1,16 @@
package org.springblade.mdm.task;
-import com.alibaba.excel.util.StringUtils;
import lombok.extern.slf4j.Slf4j;
-import org.apache.commons.codec.digest.DigestUtils;
-import org.springblade.mdm.basesetting.machine.MachineService;
-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.machinefile.entity.MachineFile;
+import org.springblade.mdm.machinefile.service.MachineFileScanService;
import org.springblade.mdm.machinefile.service.MachineFileService;
import org.springblade.mdm.program.service.ProgramAnnotationService;
-import org.springblade.mdm.utils.FileContentUtil;
-import org.springblade.system.pojo.entity.DictBiz;
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 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.attribute.BasicFileAttributes;
-import java.nio.file.attribute.FileTime;
-import java.util.Date;
-import java.util.List;
@Slf4j
@Component
@@ -37,6 +24,8 @@
private ParamService paramService;
@Autowired
private ProgramAnnotationService programAnnotationService;
+ @Autowired
+ private MachineFileScanService machineFileScanService;
// 姣�5绉掓墽琛屼竴娆�
//@Scheduled(fixedRate = 1000000)
//@Scheduled(cron = "0 1 0 * * ?") // 姣忓ぉ涓婂崍0鐐�1鍒嗘墽琛�
@@ -48,7 +37,7 @@
if(!ParamService.NETWORK_TYPE_SHEMI.equals(networkType)){
//闈炴秹瀵嗙綉锛屾墠鎵弿鐩綍鏂囦欢
- scanMachineFile();
+ machineFileScanService.scanMachineFile();
}
}
@@ -56,47 +45,48 @@
/**
* 鎵弿鎵�鏈夋満搴婄殑閰嶇疆涔嬬洰褰�
*/
+ /*
public void scanMachineFile() {
List<Machine> machines = machineService.lambdaQuery().eq(Machine::getStatus,Machine.STATUS_ENABLE).list();
for (Machine machine : machines) {
- //鎵弿鏂伴椈鐣�
+ //鎵弿鏂版枃浠�
try {
scanDir(machine,MachineFile.DIR_TYPE_REC);
}catch(Exception e) {
- log.error("REC鎵弿鏂囦欢寮傚父,鏈哄簥"+machine.getCode(),e);
+ log.error("REC鎵弿鏂囦欢寮傚父,鏈哄簥{}", machine.getCode(), e);
}
try {
scanDir(machine,MachineFile.DIR_TYPE_SEND);
}catch(Exception e) {
- log.error("SEND鎵弿鏂囦欢寮傚父,鏈哄簥"+machine.getCode(),e);
+ log.error("SEND鎵弿鏂囦欢寮傚父,鏈哄簥{}", machine.getCode(), e);
}
try {
scanDir(machine,MachineFile.DIR_TYPE_TEMP);
}catch(Exception e) {
- log.error("TEMP鎵弿鏂囦欢寮傚父,鏈哄簥"+machine.getCode(),e);
+ log.error("TEMP鎵弿鏂囦欢寮傚父,鏈哄簥{}", machine.getCode(), e);
}
//娓呯悊鏁版嵁搴擄紝鍒犻櫎鏂囦欢涓嶅瓨鍦ㄧ殑鏁版嵁
try {
clearDeletedReccords(machine,MachineFile.DIR_TYPE_REC);
}catch(Exception e) {
- log.error("REC鎵弿鏂囦欢寮傚父,鏈哄簥"+machine.getCode(),e);
+ log.error("REC鎵弿鏂囦欢寮傚父,鏈哄簥{}", machine.getCode(), e);
}
try {
clearDeletedReccords(machine,MachineFile.DIR_TYPE_SEND);
}catch(Exception e) {
- log.error("SEND鎵弿鏂囦欢寮傚父,鏈哄簥"+machine.getCode(),e);
+ log.error("SEND鎵弿鏂囦欢寮傚父,鏈哄簥{}", machine.getCode(), e);
}
try {
clearDeletedReccords(machine,MachineFile.DIR_TYPE_TEMP);
}catch(Exception e) {
- log.error("TEMP鎵弿鏂囦欢寮傚父,鏈哄簥"+machine.getCode(),e);
+ log.error("TEMP鎵弿鏂囦欢寮傚父,鏈哄簥{}", machine.getCode(), e);
}
}
}
-
+ */
/**
* 鎵弿鐩綍
@@ -104,6 +94,7 @@
* @param dirType 鐩綍绫诲瀷
* @throws IOException
*/
+ /*
public void scanDir(Machine machine,String dirType) throws IOException {
String basePath = MachineFileService.getBasePath(machine,dirType);
if(basePath == null) {
@@ -192,7 +183,7 @@
}
-
+ */
/**
* 璇诲彇鏂囦欢涓殑绋嬪簭鐘舵��
* @param filePath 鏂囦欢璺緞
@@ -201,6 +192,7 @@
* @return 鐘舵�佺殑鏁存暟涔嬪拰
* @throws IOException
*/
+ /*
int readProgramStatus(Path filePath,String machineGroupCode,List<DictBiz> annotatiionList) throws IOException {
int programStatus = MachineFile.PROGRAM_STATUS_UNKNOWN;
try(InputStream ins = Files.newInputStream(filePath)){
@@ -219,13 +211,14 @@
return programStatus;
}
-
+ */
/**
* 娓呯悊宸茬粡鍒犻櫎浜嗘枃浠剁殑璁板綍
* @param machine
* @param dirType
* @throws IOException
*/
+ /*
void clearDeletedReccords(Machine machine,String dirType) throws IOException {
List<MachineFile> machineFiles = this.machineFileService.lambdaQuery().eq(MachineFile::getDirType,dirType)
.eq(MachineFile::getMachineCode,machine.getCode()).list();
@@ -252,5 +245,5 @@
this.machineFileService.updateById(mf);
}
}
- }
+ }*/
}
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/task/ReceiveDirMoveTask.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/task/ReceiveDirMoveTask.java
index 44b2792..77ecd48 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/task/ReceiveDirMoveTask.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/task/ReceiveDirMoveTask.java
@@ -1,7 +1,7 @@
package org.springblade.mdm.task;
import lombok.extern.slf4j.Slf4j;
-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.ParamService;
import org.springblade.mdm.machinefile.entity.MachineFile;
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/task/SendDirCleanTask.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/task/SendDirCleanTask.java
index 6eafc1f..28bb3af 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/task/SendDirCleanTask.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/task/SendDirCleanTask.java
@@ -1,7 +1,7 @@
package org.springblade.mdm.task;
import lombok.extern.slf4j.Slf4j;
-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.ParamService;
import org.springblade.mdm.machinefile.entity.MachineFile;
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/test/MyTestController.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/test/MyTestController.java
index 801bdb3..2b415e4 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/test/MyTestController.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/test/MyTestController.java
@@ -10,6 +10,7 @@
import org.springblade.mdm.commons.service.EmailService;
import org.springblade.mdm.flow.service.WIthdrawService;
import org.springblade.mdm.machinefile.entity.MachineFile;
+import org.springblade.mdm.machinefile.service.MachineFileScanService;
import org.springblade.mdm.program.entity.NcNode;
import org.springblade.mdm.program.service.NcNodeService;
import org.springblade.mdm.program.service.ProgramAnnotationService;
@@ -44,7 +45,8 @@
private IDictBizClient bizDictClient;
@Autowired
private EmailService mailService;
-
+ @Autowired
+ private MachineFileScanService machineFileScanService;
@Autowired
private WIthdrawService withdrawService;
/**
@@ -76,13 +78,13 @@
}
- @GetMapping("/scan")
+ @GetMapping("/scandir")
@Operation(summary = "test鎵弿", description = "test鎵弿")
public R<Void> scan() throws IOException {
Machine machine = new Machine();
machine.setCode("M_01_FN");
machine.setProgReceiveDir("d:/data/machine1/rec");
- machineFileScanTask.scanDir(machine, MachineFile.DIR_TYPE_REC);
+ machineFileScanService.scanDir(machine, MachineFile.DIR_TYPE_REC);
return R.success();
}
@@ -122,6 +124,9 @@
return R.success();
}
-
+ @GetMapping("/scanfile")
+ public void scanFile(){
+ machineFileScanService.scanMachineFile();
+ }
}
diff --git a/doc/sql/mdm/mdm.mysql.all.create.sql b/doc/sql/mdm/mdm.mysql.all.create.sql
index 32638b7..382c69d 100644
--- a/doc/sql/mdm/mdm.mysql.all.create.sql
+++ b/doc/sql/mdm/mdm.mysql.all.create.sql
@@ -478,3 +478,32 @@
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='宸ユ帶缃戞満搴婃枃浠朵慨鏀瑰巻鍙�';
+
+
+DROP TABLE IF EXISTS `mdm_file_send_record`;
+CREATE TABLE `mdm_file_send_record` (
+ `id` bigint NOT NULL,
+ `tenant_id` varchar(6) DEFAULT NULL COMMENT '鎵�灞炵鎴�',
+ `name` varchar(100) NOT NULL COMMENT '鏂囦欢鍚嶇О',
+ `machine_code` varchar(100) DEFAULT NULL COMMENT '鏈哄簥缂栫爜',
+ `file_size` bigint DEFAULT NULL COMMENT '鏂囦欢瀛楄妭鏁�',
+ `status` int DEFAULT NULL COMMENT '涓氬姟鐘舵��',
+ `create_dept` bigint DEFAULT NULL COMMENT '鍒涘缓鍗曚綅',
+ `is_deleted` int DEFAULT NULL,
+ `create_time` datetime DEFAULT NULL COMMENT '鍒涘缓鏃堕棿',
+ `create_user` bigint DEFAULT NULL COMMENT '鍒涘缓浜�',
+ `update_time` datetime DEFAULT NULL COMMENT '鏇存柊鏃堕棿',
+ `update_user` bigint DEFAULT NULL COMMENT '鏇存柊浜�',
+ PRIMARY KEY (`id`) USING BTREE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='宸ユ帶缃戞枃浠朵笅鍙戣褰�';
+
+DROP TABLE IF EXISTS `mdm_file_monitor_record`;
+CREATE TABLE `mdm_file_monitor_record` (
+ `id` bigint NOT NULL,
+ `name` varchar(100) NOT NULL COMMENT '鏂囦欢鍚嶇О',
+ `dir_path` varchar(100) NOT NULL COMMENT '鏂囦欢鐩綍',
+ `event_type` int DEFAULT NULL COMMENT '浜嬩欢绫诲瀷锛�1:鍒涘缓;2锛氫慨鏀�;3鍒犻櫎',
+ `create_time` datetime DEFAULT NULL COMMENT '鍒涘缓鏃堕棿',
+ PRIMARY KEY (`id`) USING BTREE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='宸ユ帶缃戞枃浠剁洃鎺ц褰�';
+
--
Gitblit v1.9.3