package com.lxzn.nc.service.impl; import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.IdWorker; import com.baomidou.mybatisplus.core.toolkit.StringUtils; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.lxzn.auth.JwtUtil; import com.lxzn.base.service.IDncPassLogService; import com.lxzn.base.service.ISingleDictionaryService; import com.lxzn.framework.domain.activiti.response.ActivitiCode; import com.lxzn.framework.domain.base.DncPassLog; import com.lxzn.framework.domain.base.SingleDictionary; import com.lxzn.framework.domain.base.ext.NcTxtFilePathInfo; import com.lxzn.framework.domain.filesystem.response.FileUploadResult; import com.lxzn.framework.domain.nc.*; import com.lxzn.framework.domain.nc.request.DocInfoQueryRequest; import com.lxzn.framework.domain.nc.request.DocInfoUploadRequest; import com.lxzn.framework.domain.nc.response.DocumentCode; import com.lxzn.framework.domain.ucenter.response.UcenterCode; import com.lxzn.framework.exception.ExceptionCast; import com.lxzn.framework.model.response.CommonCode; import com.lxzn.framework.model.response.QueryListResponseResult; import com.lxzn.framework.model.response.QueryPageResponseResult; import com.lxzn.framework.model.response.ResponseResult; import com.lxzn.framework.utils.BeanMapper; import com.lxzn.framework.utils.TelnetUtil; import com.lxzn.framework.utils.ValidateUtil; import com.lxzn.framework.utils.date.DateUtil; import com.lxzn.framework.utils.file.FileUtil; import com.lxzn.nc.dao.DocInfoMapper; import com.lxzn.nc.service.*; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.File; import java.io.IOException; import java.nio.file.Files; import java.nio.file.StandardCopyOption; import java.util.ArrayList; import java.util.Date; import java.util.List; @Slf4j @Service public class DocInfoServiceImpl extends ServiceImpl implements IDocInfoService { @Autowired private IDocClassificationService docClassificationService; @Autowired private IDocFileService docFileService; @Autowired private IFileOperateService fileOperateService; @Autowired private IDocRelativeService docRelativeService; @Autowired private IDeviceInfoService deviceInfoService; @Autowired private IDeviceGroupService deviceGroupService; @Value("${securedoc.serverIp}") private String serverIp; @Value("${securedoc.serverPort}") private int serverPort; @Value("${securedoc.whether}") private String whether; @Value("${securedoc.localFilePath}") private String localFilePath; @Autowired private IDncPassLogService dncPassLogService; @Autowired private INcLogInfoService iNcLogInfoService; @Autowired private ISingleDictionaryService dictionaryService; /*备份处理*/ @Override @Transactional(rollbackFor = {Exception.class}) public boolean addDocInfo(MultipartFile file, DocInfoUploadRequest uploadRequest) { if(file == null || file.isEmpty() || uploadRequest == null) ExceptionCast.cast(CommonCode.INVALID_PARAM); if(!ValidateUtil.validateString(uploadRequest.getAttributionId()) || !ValidateUtil.validateInteger(uploadRequest.getAttributionType())) ExceptionCast.cast(DocumentCode.DOC_ATTRIBUTE_ERROR); if(!ValidateUtil.validateString(uploadRequest.getDocClassCode())) ExceptionCast.cast(DocumentCode.DOC_CLASS_ERROR); DocClassification docClass = docClassificationService.getByCode(uploadRequest.getDocClassCode()); if(docClass == null) ExceptionCast.cast(DocumentCode.DOC_CLASS_ERROR); String fileName = FileUtil.getFilenameNonSuffix(file.getOriginalFilename()); String fileNameAll = file.getOriginalFilename(); DocInfo en = findByAttrAndDocName(fileName, uploadRequest.getAttributionType(), uploadRequest.getAttributionId()); //针对存在的处理 if(en != null) ExceptionCast.cast(DocumentCode.DOC_IS_EXIST); FileUploadResult fileUploadResult = FileUtil.uploadFile(file); if(fileUploadResult == null) ExceptionCast.cast(DocumentCode.DOC_UPLOAD_ERROR); DocInfo docInfo = new DocInfo(); String docId = IdWorker.getIdStr(); docInfo.setDocId(docId); docInfo.setSyncStatus(2); docInfo.setDocName(fileUploadResult.getFileName()); docInfo.setDocSuffix(fileUploadResult.getFileSuffix()); docInfo.setDocStatus(1); DocRelative docRelative = new DocRelative(); docRelative.setAttributionId(uploadRequest.getAttributionId()); docRelative.setDocId(docInfo.getDocId()); docRelative.setAttributionType(uploadRequest.getAttributionType()); docRelative.setClassificationId(docClass.getClassificationId()); boolean b = docRelativeService.save(docRelative); if(!b) ExceptionCast.cast(DocumentCode.DOC_UPLOAD_ERROR); DocFile docFile = new DocFile(); docFile.setDocId(docInfo.getDocId()); docFile.setFileName(fileUploadResult.getFileName()); docFile.setFileEncodeName(fileUploadResult.getEncodeFileName()); docFile.setFilePath(fileUploadResult.getFilePath()); docFile.setFileSize(fileUploadResult.getFileSize()); docFile.setFileSuffix(fileUploadResult.getFileSuffix()); b = docFileService.addDocFile(docFile); if(!b) ExceptionCast.cast(DocumentCode.DOC_UPLOAD_ERROR); docInfo.setPublishVersion(docFile.getDocVersion()); docInfo.setPublishFileId(docFile.getFileId()); //COPY DeviceInfo deviceInfo= deviceInfoService.getById(uploadRequest.getAttributionId()); String sendOrRec = "send"; if (uploadRequest.getDocClassCode().equals("REC")) { sendOrRec = "REC"; } if (deviceInfo != null) { List strings = deviceGroupService.findListParentTreeAll(deviceInfo.getGroupId()); boolean copyFileNc = false; if (strings != null && !strings.isEmpty()) { String path = org.apache.commons.lang3.StringUtils.join(strings.toArray(), "/"); copyFileNc = FileUtil.copyFile(fileUploadResult.getFilePath()+"/" + fileUploadResult.getEncodeFileName(), path+ "/" + deviceInfo.getDeviceNo() ,fileNameAll,sendOrRec); if (!copyFileNc) { ExceptionCast.cast(ActivitiCode.ACT_FILE_ERROR); } else { FileUtil.deleteZipFromToSend(path + "/"+ deviceInfo.getDeviceNo(), docFile.getFileName(),docFile.getFileSuffix(),sendOrRec); } } else { copyFileNc =FileUtil.copyFile(fileUploadResult.getFilePath()+"/" + fileUploadResult.getEncodeFileName(), deviceInfo.getDeviceNo() ,fileNameAll,sendOrRec); if (!copyFileNc) { ExceptionCast.cast(ActivitiCode.ACT_FILE_ERROR); } else { FileUtil.deleteZipFromToSend(fileUploadResult.getFilePath()+"/" + fileUploadResult.getEncodeFileName() + "/"+ deviceInfo.getDeviceNo(), docFile.getFileName(),docFile.getFileSuffix(),sendOrRec); } } } //添加日志 NcLogInfo ncLogInfo = new NcLogInfo(); //模块 ncLogInfo.setModuleInfo("设备结构树"); //类型 ncLogInfo.setOperateType(7); //日志内容 ncLogInfo.setLogContent("导入"+docClass.getClassificationName()+",文档名称:"+(docFile.getFileName()+"."+docFile.getFileSuffix())); iNcLogInfoService.saveLogNcInfos(ncLogInfo); boolean saveBool = super.save(docInfo); return saveBool; } @Override @Transactional(rollbackFor = {Exception.class}) public boolean addDocInfoRec(String pathFile,File fileRec) { // /dnc/NC/3140058/REC/ if (StringUtils.isEmpty(pathFile)) { return false; } SingleDictionary singleDictionary=dictionaryService.findListFromTypeCode("virtual_equipment_id").get(0); MultipartFile file = FileUtil.fileToMultipartFile(fileRec); DocClassification docClass = docClassificationService.getByCode("REC"); if(docClass == null) { ExceptionCast.cast(DocumentCode.DOC_CLASS_ERROR); } //根据设备编号查询数据 Integer recNum = pathFile.lastIndexOf("/REC/"); if (recNum == -1) { return false; } String recF = pathFile.substring(0,recNum);//将返回def}ab Integer equipmentId = recF.lastIndexOf("/"); String deviceNo = recF.substring(equipmentId+1,recF.length()); if (StringUtils.isEmpty(deviceNo)) { log.error("设备号为空"); return false; } log.info("deviceNo ==== " + deviceNo); DeviceInfo deviceInfo = deviceInfoService.getByDeviceNo(deviceNo); if (deviceInfo == null) { return false; } String docEquipmentId = null; if (singleDictionary != null) { docEquipmentId= String.valueOf(singleDictionary.getDicValue()); } List strings = deviceGroupService.findListParentTreeAll(deviceInfo.getGroupId()); String fileSuffix = FileUtil.getFileSuffix(fileRec.getName()); if ( !fileSuffix.equals("zip") && !fileSuffix.equals("rar") ) { //处理文件 记录并上报 //1、 判断端口是否能够访问 文件路径加 // boolean btelnetPort = TelnetUtil.telnetPort(serverIp,serverPort,10); // if (!btelnetPort) { // ExceptionCast.cast(ActivitiCode.ACT_DEVICE_DOC_FILELABLE); // } DncPassLog passInfoTxt = new DncPassLog(); String path = org.apache.commons.lang3.StringUtils.join(strings.toArray(), "/"); Date dateFirst = DateUtil.getNow(); passInfoTxt.setDayTime(DateUtil.format(dateFirst,DateUtil.STR_YEARMONTHDAY)); //休眠 500毫秒 DncPassLog dncPassLog = dncPassLogService.findDayTime(DateUtil.format(dateFirst,DateUtil.STR_YEARMONTHDAY)); Integer fileTxt = 0, fileNc =0; if (dncPassLog !=null) { fileTxt = dncPassLog.getSequenceNumber() + 1; fileNc = fileTxt + 1; } else { fileTxt = 1; fileNc = fileTxt + 1; } //处理文件名称 文件路径 String sequence = String.format("%06d",fileTxt); String sequenceNc = String.format("%06d",fileNc); passInfoTxt.setSequenceNumber(fileTxt); passInfoTxt.setSequenceOrder(sequence); passInfoTxt.setCreateTime(dateFirst); System.out.println(DateUtil.format(dateFirst,DateUtil.STR_DATE_TIME)); passInfoTxt.setPassType("01"); dncPassLogService.save(passInfoTxt); DncPassLog passInfoNc = new DncPassLog(); passInfoNc.setSequenceNumber(fileNc); passInfoNc.setSequenceOrder(sequenceNc); passInfoNc.setDayTime(DateUtil.format(dateFirst,DateUtil.STR_YEARMONTHDAY)); passInfoNc.setPassType("02"); passInfoNc.setPassName(fileRec.getName()); try { Thread.sleep(1000); Date date = new Date(); passInfoNc.setCreateTime(date); System.out.println(DateUtil.format(date,DateUtil.STR_DATE_TIME)); } catch (InterruptedException e) { e.printStackTrace(); } dncPassLogService.save(passInfoNc); NcTxtFilePathInfo ncTxt = new NcTxtFilePathInfo(); ncTxt.setEquipmentId(deviceInfo.getDeviceNo()); if (deviceInfo.getDeviceNo().equals(docEquipmentId)) { //原有名称加时间 ncTxt.setFileNcName(fileRec.getName()+"_"+DateUtil.format(dateFirst,DateUtil.STR_YEARMONTHDAY)); }else { ncTxt.setFileNcName("10B"+DateUtil.format(dateFirst,DateUtil.STR_YEARMONTHDAY)+sequenceNc); } ncTxt.setFileTxtName("10B"+DateUtil.format(dateFirst,DateUtil.STR_YEARMONTHDAY)+sequence); ncTxt.setFilePath(path + "/"+ deviceInfo.getDeviceNo() + "/" ); ncTxt.setOrigFileName(fileRec.getName()); ncTxt.setOrigFileSuffix(fileSuffix); ncTxt.setFileAddOrDelete(1); String loFilePath = localFilePath + ncTxt.getFileTxtName() + ".nc"; String size = String.valueOf(fileRec.length()); try { String allList = new String(); allList=(ncTxt.getFileTxtName()+"\n"); allList+=(ncTxt.getFileNcName()+"\n"); allList+=(ncTxt.getOrigFileName()+"\n"); allList+=(ncTxt.getOrigFileSuffix()+"\n"); allList+=(ncTxt.getFilePath()+"\n"); allList+=(ncTxt.getEquipmentId()+"\n"); allList+=(ncTxt.getFileAddOrDelete().toString()+"\n"); // 文件大小字节 第二行 工控网进行文件分析 allList+= (size+"\n"); FileUtil.fileWriterSql(loFilePath,allList); //对比设备编号 if (deviceInfo.getDeviceNo().equals(docEquipmentId)) { String originalFilename = fileRec.getName(); File virtualDeviceDir = new File(localFilePath); if (!virtualDeviceDir.exists() && !virtualDeviceDir.mkdirs()) { log.error("无法创建虚拟设备目录: {}", virtualDeviceDir.getAbsolutePath()); return false; } // 3. 构建目标文件路径 File targetFile = new File(virtualDeviceDir, originalFilename); try { // 4. 使用NIO复制文件,并替换已存在的文件 //更换文件名,更换为ncTxt.getFileNcName() Files.copy( fileRec.toPath(), targetFile.toPath(), StandardCopyOption.REPLACE_EXISTING ); log.info("虚拟设备文件已保存至: {}", targetFile.getAbsolutePath()); } catch (IOException e) { log.error("虚拟设备文件保存失败", e); return false; } return true; }else { //文件解析重新规划 //添加文件名字,第一行 boolean copyFileNc = FileUtil.copyFileUpNameRec(fileRec, localFilePath + ncTxt.getFileNcName(), fileSuffix,"NC"); if (!copyFileNc) { FileUtil.deleteNcFile(loFilePath); } } } catch (IOException e) { e.printStackTrace(); } } String fileName = FileUtil.getFilenameNonSuffix(file.getOriginalFilename()); FileUploadResult fileUploadResult = FileUtil.uploadFile(file); if(fileUploadResult == null) { return false; } DocInfo en = findByAttrAndDocName(fileName, 4, deviceInfo.getDeviceId()); if(en != null) { return false; } DocInfo docInfo = new DocInfo(); String docId = IdWorker.getIdStr(); docInfo.setDocId(docId); docInfo.setDocName(fileUploadResult.getFileName()); docInfo.setDocSuffix(fileUploadResult.getFileSuffix()); docInfo.setDocStatus(2); DocRelative dr = new DocRelative(); dr.setAttributionId(deviceInfo.getDeviceId()); dr.setDocId(docInfo.getDocId()); dr.setAttributionType(4); dr.setClassificationId(docClass.getClassificationId()); try { boolean b = docRelativeService.save(dr); if(!b) { ExceptionCast.cast(DocumentCode.DOC_UPLOAD_ERROR); } }catch (Exception e) { e.printStackTrace(); } DocFile docFile = new DocFile(); docFile.setDocId(docInfo.getDocId()); docFile.setFileName(fileUploadResult.getFileName()); docFile.setFileEncodeName(fileUploadResult.getEncodeFileName()); docFile.setFilePath(fileUploadResult.getFilePath()); docFile.setFileSize(fileUploadResult.getFileSize()); docFile.setFileSuffix(fileUploadResult.getFileSuffix()); docFile.setUpdateUser("11"); boolean b = docFileService.addDocFile(docFile); if(!b) { return false; } docInfo.setPublishVersion(docFile.getDocVersion()); docInfo.setPublishFileId(docFile.getFileId()); boolean saveBool = super.save(docInfo); return saveBool; } @Override @Transactional(rollbackFor = {Exception.class}) public boolean editDocInfo(String id, DocInfo docInfo) { if(!ValidateUtil.validateString(id) || docInfo == null) ExceptionCast.cast(CommonCode.INVALID_PARAM); DocInfo en = super.getById(id); if(en == null) ExceptionCast.cast(DocumentCode.DOC_NOT_EXIST); DocInfo asDoc = findByAttrAndDocNameNotThis(docInfo.getDocName(), docInfo.getAttributionType(), docInfo.getAttributionId(), id); if(asDoc != null) ExceptionCast.cast(DocumentCode.DOC_IS_EXIST); docInfo.setDocId(id); docInfo.setDocStatus(null); docInfo.setDocSuffix(null); docInfo.setClassificationId(null); docInfo.setPublishFileId(null); docInfo.setPublishVersion(null); //添加日志 NcLogInfo ncLogInfo = new NcLogInfo(); //模块 ncLogInfo.setModuleInfo("设备结构树"); //类型 ncLogInfo.setOperateType(3); //日志内容 ncLogInfo.setLogContent("文档名称:"+docInfo.getDocName()); //修改保存备注 ncLogInfo.setRemark(JSONObject.toJSONString(en)); iNcLogInfoService.saveLogNcInfos(ncLogInfo); return super.updateById(docInfo); } @Override @Transactional(rollbackFor = {Exception.class}) public boolean deleteDocInfo(String id) { if(!ValidateUtil.validateString(id)) ExceptionCast.cast(CommonCode.INVALID_PARAM); DocInfo en = super.getById(id); if(en == null) ExceptionCast.cast(DocumentCode.DOC_NOT_EXIST); if(en.getDocStatus() != 1) ExceptionCast.cast(DocumentCode.DOC_DEL_ERROR); FileOperate operate = fileOperateService.getByDocId(id); if(operate != null) ExceptionCast.cast(DocumentCode.DOC_IS_OPERATING); boolean b = docFileService.deleteByDocId(id); if(!b) ExceptionCast.cast(CommonCode.FAIL); b = docRelativeService.deleteByDocId(id); if(!b) ExceptionCast.cast(CommonCode.FAIL); //添加日志 NcLogInfo ncLogInfo = new NcLogInfo(); //模块 ncLogInfo.setModuleInfo("产品结构树"); //类型 ncLogInfo.setOperateType(4); //日志内容 ncLogInfo.setLogContent("文档名称:"+en.getDocName()); iNcLogInfoService.saveLogNcInfos(ncLogInfo); return super.removeById(id); } @Override @Transactional(rollbackFor = {Exception.class}) public boolean pushDocFile(String id, MultipartFile file) { if(file == null || file.isEmpty() || !ValidateUtil.validateString(id)) ExceptionCast.cast(CommonCode.INVALID_PARAM); String userId = JwtUtil.getUserId(); if(!ValidateUtil.validateString(userId)) ExceptionCast.cast(UcenterCode.UCENTER_ACCOUNT_NOT_EXIST); FileOperate operate = fileOperateService.getByDocId(id); if(operate == null || !userId.equals(operate.getCreateUser())) ExceptionCast.cast(DocumentCode.DOC_OPERATE_PUSH_FAIL); DocInfo en = super.getById(id); if(en == null) ExceptionCast.cast(DocumentCode.DOC_NOT_EXIST); List deviceList = docRelativeService.findDeviceByDocId(en.getDocId()); if(deviceList != null && !deviceList.isEmpty()) ExceptionCast.cast(DocumentCode.DOC_DEVICE_EXIST); String suffix = FileUtil.getFileSuffix(file.getOriginalFilename()); if(ValidateUtil.validateString(en.getDocSuffix())) { if(!en.getDocSuffix().equals(suffix)) { ExceptionCast.cast(DocumentCode.DOC_SUFFIX_ERROR); } }else { if(ValidateUtil.validateString(suffix)) { ExceptionCast.cast(DocumentCode.DOC_SUFFIX_ERROR); } } FileUploadResult fileUploadResult = FileUtil.uploadFile(file); DocFile docFile = new DocFile(); docFile.setDocId(id); docFile.setFileName(fileUploadResult.getFileName()); docFile.setFileEncodeName(fileUploadResult.getEncodeFileName()); docFile.setFilePath(fileUploadResult.getFilePath()); docFile.setFileSize(fileUploadResult.getFileSize()); docFile.setFileSuffix(fileUploadResult.getFileSuffix()); //添加日志 NcLogInfo ncLogInfo = new NcLogInfo(); //模块 ncLogInfo.setModuleInfo("设备结构树"); //类型 ncLogInfo.setOperateType(7); //日志内容 ncLogInfo.setLogContent("入库"+docFile.getFileSuffix()+"格式文档,文档名称:"+docFile.getFileName()); ncLogInfo.setRemark(JSONObject.toJSONString(en)); iNcLogInfoService.saveLogNcInfos(ncLogInfo); boolean b = fileOperateService.deleteByDocId(id); if(!b) ExceptionCast.cast(CommonCode.FAIL); b= docFileService.addDocFile(docFile); if(!b) ExceptionCast.cast(CommonCode.FAIL); en.setPublishVersion(docFile.getDocVersion()); en.setPublishFileId(docFile.getFileId()); return super.updateById(en); } @Override @Transactional(rollbackFor = {Exception.class}) public DocFile checkDocInfo(String id) { if(!ValidateUtil.validateString(id)) ExceptionCast.cast(CommonCode.INVALID_PARAM); DocInfo en = super.getById(id); if(en == null) ExceptionCast.cast(DocumentCode.DOC_NOT_EXIST); if(en.getDocStatus() != 1) ExceptionCast.cast(DocumentCode.DOC_OPERATE_FAIL); if(!ValidateUtil.validateString(en.getPublishFileId())) ExceptionCast.cast(DocumentCode.DOC_PUBLISH_FILE_NONE); FileOperate operate = fileOperateService.getByDocId(id); if(operate != null) ExceptionCast.cast(DocumentCode.DOC_IS_OPERATING); operate = new FileOperate(); operate.setDocId(id); boolean b = fileOperateService.save(operate); if(!b) ExceptionCast.cast(DocumentCode.DOC_OPERATE_FAIL); DocFile fileInfo = docFileService.getById(en.getPublishFileId()); if(fileInfo == null) ExceptionCast.cast(DocumentCode.DOC_PUBLISH_FILE_NOT_EXIST); return fileInfo; } @Override @Transactional(rollbackFor = {Exception.class}) public boolean publishDocInfo(String id) { if(!ValidateUtil.validateString(id)) ExceptionCast.cast(CommonCode.INVALID_PARAM); DocInfo en = super.getById(id); if(en == null) ExceptionCast.cast(DocumentCode.DOC_NOT_EXIST); if(en.getDocStatus() != 1) ExceptionCast.cast(DocumentCode.DOC_PUBLISH_ERROR); if(!ValidateUtil.validateString(en.getPublishFileId())) ExceptionCast.cast(DocumentCode.DOC_PUBLISH_FILE_NONE); DocFile pubFile = docFileService.getById(en.getPublishFileId()); if(pubFile == null) ExceptionCast.cast(DocumentCode.DOC_FILE_ERROR); FileOperate operate = fileOperateService.getByDocId(id); if(operate != null) ExceptionCast.cast(DocumentCode.DOC_IS_OPERATING); DocFile old = docFileService.getDocFileNearest(en.getDocId()); if(old == null) ExceptionCast.cast(DocumentCode.DOC_PUBLISH_FILE_NONE); //添加日志 NcLogInfo ncLogInfo = new NcLogInfo(); //模块 ncLogInfo.setModuleInfo("设备结构树"); //类型 ncLogInfo.setOperateType(7); //日志内容 ncLogInfo.setLogContent("发布"+en.getDocSuffix()+"格式文档,文档名称:"+en.getDocName()); iNcLogInfoService.saveLogNcInfos(ncLogInfo); if(old.getDocVersion().contains(".")) { DocFile docFile = new DocFile(); BeanMapper.copy(pubFile, docFile); docFile.setFileId(null); docFile.setDocVersion(old.getDocVersion().substring(0, 1)); boolean b = docFileService.save(docFile); if(!b) ExceptionCast.cast(CommonCode.FAIL); return super.lambdaUpdate().eq(DocInfo::getDocId, id).set(DocInfo::getDocStatus, 2).set(DocInfo::getPublishFileId, docFile.getFileId()) .set(DocInfo::getPublishVersion, docFile.getDocVersion()).update(); }else { return super.lambdaUpdate().eq(DocInfo::getDocId, id).set(DocInfo::getDocStatus, 2).set(DocInfo::getPublishFileId, old.getFileId()) .set(DocInfo::getPublishVersion, old.getDocVersion()).update(); } } @Override @Transactional(rollbackFor = {Exception.class}) public boolean republishDocInfo(String id) { if(!ValidateUtil.validateString(id)) ExceptionCast.cast(CommonCode.INVALID_PARAM); DocInfo en = super.getById(id); if(en == null) ExceptionCast.cast(DocumentCode.DOC_NOT_EXIST); if(en.getDocStatus() != 2) ExceptionCast.cast(DocumentCode.DOC_REPUBLISH_ERROR); //添加日志 NcLogInfo ncLogInfo = new NcLogInfo(); //模块 ncLogInfo.setModuleInfo("设备结构树"); //类型 ncLogInfo.setOperateType(7); //日志内容 ncLogInfo.setLogContent("重新发布"+en.getDocSuffix()+"格式文档,文档名称:"+en.getDocName()); iNcLogInfoService.saveLogNcInfos(ncLogInfo); return super.lambdaUpdate().eq(DocInfo::getDocId, id).set(DocInfo::getDocStatus, 1).update(); } @Override @Transactional(rollbackFor = {Exception.class}) public boolean pigeonholeDocInfo(String id) { if(!ValidateUtil.validateString(id)) ExceptionCast.cast(CommonCode.INVALID_PARAM); DocInfo en = super.getById(id); if(en == null) ExceptionCast.cast(DocumentCode.DOC_NOT_EXIST); if(en.getDocStatus() == 3) ExceptionCast.cast(DocumentCode.DOC_PIGEONHOLE_ERROR); FileOperate operate = fileOperateService.getByDocId(id); if(operate != null) ExceptionCast.cast(DocumentCode.DOC_IS_OPERATING); //添加日志 NcLogInfo ncLogInfo = new NcLogInfo(); //模块 ncLogInfo.setModuleInfo("设备结构树"); //类型 ncLogInfo.setOperateType(7); //日志内容 ncLogInfo.setLogContent("归档"+en.getDocSuffix()+"格式文档,文档名称:"+en.getDocName()); iNcLogInfoService.saveLogNcInfos(ncLogInfo); return super.lambdaUpdate().eq(DocInfo::getDocId, id).set(DocInfo::getDocStatus, 3).update(); } @Override @Transactional(rollbackFor = {Exception.class}) public boolean cancelPullDocInfo(String id) { if(!ValidateUtil.validateString(id)) ExceptionCast.cast(CommonCode.INVALID_PARAM); String userId = JwtUtil.getUserId(); if(!ValidateUtil.validateString(userId)) ExceptionCast.cast(UcenterCode.UCENTER_ACCOUNT_NOT_EXIST); FileOperate operate = fileOperateService.getByDocId(id); if(operate == null || !userId.equals(operate.getCreateUser())) ExceptionCast.cast(DocumentCode.DOC_CANCEL_PULL_ERROR); DocInfo en = super.getById(id); if(en == null) ExceptionCast.cast(DocumentCode.DOC_NOT_EXIST); //添加日志 NcLogInfo ncLogInfo = new NcLogInfo(); //模块 ncLogInfo.setModuleInfo("设备结构树"); //类型 ncLogInfo.setOperateType(7); //日志内容 ncLogInfo.setLogContent("取消出库"+en.getDocSuffix()+"格式文档,文档名称:"+en.getDocName()); iNcLogInfoService.saveLogNcInfos(ncLogInfo); return fileOperateService.deleteByDocId(id); } @Override public QueryPageResponseResult findPageList(int page, int size, DocInfoQueryRequest docQuery) { if(page < 1 || size < 1) { ExceptionCast.cast(CommonCode.INVALID_PAGE); } if(docQuery == null || !ValidateUtil.validateString(docQuery.getAttributionId()) || !ValidateUtil.validateInteger(docQuery.getAttributionType()) || !ValidateUtil.validateString(docQuery.getDocClassCode())) { ExceptionCast.cast(CommonCode.INVALID_PARAM); } DocClassification docClassification = docClassificationService.getByCode(docQuery.getDocClassCode()); if(docClassification == null) { ExceptionCast.cast(CommonCode.INVALID_PAGE); } IPage pageData = new Page<>(page, size); // LambdaQueryWrapper lambdaQuery = Wrappers.lambdaQuery(); // lambdaQuery.eq(DocInfo::getAttributionType, docQuery.getAttributionType()).eq(DocInfo::getAttributionId, docQuery.getAttributionId()) // .eq(DocInfo::getClassificationId, docClassification.getClassificationId()); QueryWrapper queryWrapper = Wrappers.query(); queryWrapper.eq("r.attribution_type", docQuery.getAttributionType()).eq("r.attribution_id", docQuery.getAttributionId()) .eq("r.classification_id", docClassification.getClassificationId()); if (StringUtils.isNotEmpty(docQuery.getDocName())) { int dotIndex = docQuery.getDocName().lastIndexOf("."); if (dotIndex == -1) { queryWrapper.like("u.doc_name", docQuery.getDocName()); } else { String[] docNameArr = docQuery.getDocName().split("\\."); queryWrapper.like(StrUtil.isNotEmpty(docNameArr[0]), "u.doc_name", docNameArr[0]); queryWrapper.eq(StrUtil.isNotEmpty(docNameArr[1]), "u.doc_suffix", docNameArr[1]); } } queryWrapper.ge(StrUtil.isNotEmpty(docQuery.getStartTime()),"date_format(u.create_time,'%Y-%m-%d %H:%i:%s')",docQuery.getStartTime()); queryWrapper.le(StrUtil.isNotEmpty(docQuery.getEndTime()),"date_format(u.create_time,'%Y-%m-%d %H:%i:%s')",docQuery.getEndTime()); if(ValidateUtil.validateString(docQuery.getAscStr())) { String[] ascArr = docQuery.getAscStr().split(","); ((Page) pageData).setAsc(ascArr); } if(ValidateUtil.validateString(docQuery.getDescStr())) { String[] descStr = docQuery.getDescStr().split(","); ((Page) pageData).setDesc(descStr); } IPage docInfoIPage = super.getBaseMapper().findDocExtList(pageData, queryWrapper); return new QueryPageResponseResult<>(CommonCode.SUCCESS, docInfoIPage); } @Override public DocInfo getByDocAttrAndDocId(String docId, Integer attrType, String attributeId) { if(!ValidateUtil.validateString(docId) || !ValidateUtil.validateString(attributeId) || !ValidateUtil.validateInteger(attrType)) return null; List list = super.getBaseMapper().getByDocAttrAndDocId(docId, attrType, attributeId); if(list == null || list.size() != 1) return null; return list.get(0); } @Override public DocFile previewDocFile(String id) { if(!ValidateUtil.validateString(id)) ExceptionCast.cast(CommonCode.INVALID_PARAM); DocInfo en = super.getById(id); if(en == null) ExceptionCast.cast(DocumentCode.DOC_NOT_EXIST); DocFile fileInfo = docFileService.getById(en.getPublishFileId()); if(fileInfo == null) ExceptionCast.cast(DocumentCode.DOC_PUBLISH_FILE_NOT_EXIST); return fileInfo; } @Override @Transactional(rollbackFor = {Exception.class}) public boolean deleteByProductId(String productId) { if(!ValidateUtil.validateString(productId)) ExceptionCast.cast(CommonCode.INVALID_PARAM); Integer attrType = 1; boolean b = docFileService.deleteByDocAttr(attrType, productId); if(!b) ExceptionCast.cast(CommonCode.FAIL); b = deleteByDocAttr(attrType, productId); if(!b) ExceptionCast.cast(CommonCode.FAIL); return docRelativeService.deleteByDocAttr(attrType, productId); } @Override @Transactional(rollbackFor = {Exception.class}) public boolean deleteByComponentId(String componentId) { if(!ValidateUtil.validateString(componentId)) ExceptionCast.cast(CommonCode.INVALID_PARAM); Integer attrType = 2; boolean b = docFileService.deleteByDocAttr(attrType, componentId); if(!b) ExceptionCast.cast(CommonCode.FAIL); b = deleteByDocAttr(attrType, componentId); if(!b) ExceptionCast.cast(CommonCode.FAIL); return docRelativeService.deleteByDocAttr(attrType, componentId); } @Override @Transactional(rollbackFor = {Exception.class}) public boolean deleteByPartsId(String partsId) { if(!ValidateUtil.validateString(partsId)) ExceptionCast.cast(CommonCode.INVALID_PARAM); Integer attrType = 3; boolean b = docFileService.deleteByDocAttr(attrType, partsId); if(!b) ExceptionCast.cast(CommonCode.FAIL); b = deleteByDocAttr(attrType, partsId); if(!b) ExceptionCast.cast(CommonCode.FAIL); return docRelativeService.deleteByDocAttr(attrType, partsId); } @Override @Transactional(rollbackFor = {Exception.class}) public boolean deleteByDeviceId(String deviceId) { if(!ValidateUtil.validateString(deviceId)) ExceptionCast.cast(CommonCode.INVALID_PARAM); Integer attrType = 4; /*boolean b = docFileService.deleteByDocAttr(attrType, deviceId); if(!b) ExceptionCast.cast(CommonCode.FAIL); b = deleteByDocAttr(attrType, deviceId); if(!b) ExceptionCast.cast(CommonCode.FAIL);*/ return docRelativeService.deleteByDocAttr(attrType, deviceId); } @Override @Transactional(rollbackFor = {Exception.class}) public boolean deleteByProcessId(String processId) { if(!ValidateUtil.validateString(processId)) ExceptionCast.cast(CommonCode.INVALID_PARAM); Integer attrType = 4; boolean b = docFileService.deleteByDocAttr(attrType, processId); if(!b) ExceptionCast.cast(CommonCode.FAIL); b = deleteByDocAttr(attrType, processId); if(!b) { ExceptionCast.cast(CommonCode.FAIL); } return docRelativeService.deleteByDocAttr(attrType, processId); } @Override @Transactional(rollbackFor = {Exception.class}) public boolean deleteByDocAttr(Integer attrType, String attrId) { int i = super.getBaseMapper().deleteByDocAttr(attrType, attrId); if(i >= 0) { return true; } return false; } @Override @Transactional(rollbackFor = {Exception.class}) public ResponseResult pullDocFile(HttpServletRequest request, HttpServletResponse response, String id) { DocFile docFile = checkDocInfo(id); if(!ValidateUtil.validateString(docFile.getFilePath()) || !ValidateUtil.validateString(docFile.getFileName()) || /*!ValidateUtil.validateString(docFile.getFileSuffix()) ||*/ !ValidateUtil.validateString(docFile.getFileEncodeName())) return new ResponseResult(CommonCode.FAIL); String fileName; if(ValidateUtil.validateString(docFile.getFileSuffix())) { fileName = docFile.getFileName() + "." + docFile.getFileSuffix(); }else { fileName = docFile.getFileName(); } String filePath = docFile.getFilePath(); String fileEncodeName = docFile.getFileEncodeName(); FileUtil.downLoadFile(response, fileEncodeName, filePath, fileName); //添加日志 NcLogInfo ncLogInfo = new NcLogInfo(); //模块 ncLogInfo.setModuleInfo("设备结构树"); //类型 ncLogInfo.setOperateType(7); //日志内容 ncLogInfo.setLogContent("出库"+docFile.getFileSuffix()+"格式文档,文档名称:"+fileName); iNcLogInfoService.saveLogNcInfos(ncLogInfo); return null; } @Override public DocInfo findByAttrAndDocName(String docName, Integer attrType, String attrId) { List docInfoList = super.getBaseMapper().findByAttrAndDocName(docName, attrType, attrId); if(docInfoList == null || docInfoList.isEmpty()) return null; return docInfoList.get(0); } @Override public DocInfo findByAttrAndDocNameNotThis(String docName, Integer attrType, String attrId, String docId) { List docInfoList = super.getBaseMapper().findByAttrAndDocName(docName, attrType, attrId); if(docInfoList == null || docInfoList.isEmpty()) return null; for(DocInfo docInfo : docInfoList) { if(!docId.equals(docInfo.getDocId())) { return docInfo; } } return null; } @Override public List getByDocId(String docId) { return super.getBaseMapper().getByDocId(docId); } @Override public QueryPageResponseResult findPageListByDevice(int page, int size, DocInfoQueryRequest docQuery) { if(page < 1 || size < 1) { ExceptionCast.cast(CommonCode.INVALID_PAGE); } if(docQuery == null || !ValidateUtil.validateString(docQuery.getAttributionId()) || !ValidateUtil.validateInteger(docQuery.getAttributionType()) || !ValidateUtil.validateString(docQuery.getDocClassCode())) { ExceptionCast.cast(CommonCode.INVALID_PARAM); } DocClassification docClassification = docClassificationService.getByCode(docQuery.getDocClassCode()); if(docClassification == null) { ExceptionCast.cast(CommonCode.INVALID_PAGE); } IPage pageData = new Page<>(page, size); QueryWrapper queryWrapper = Wrappers.query(); queryWrapper.eq("r.attribution_type", docQuery.getAttributionType()) .eq("r.attribution_id", docQuery.getAttributionId()) .eq("r.classification_id", docClassification.getClassificationId()); if (StringUtils.isNotEmpty(docQuery.getDocName())) { int dotIndex = docQuery.getDocName().lastIndexOf("."); if (dotIndex == -1) { queryWrapper.like("u.doc_name", docQuery.getDocName()); } else { String[] docNameArr = docQuery.getDocName().split("\\."); queryWrapper.like(StrUtil.isNotEmpty(docNameArr[0]), "u.doc_name", docNameArr[0]); queryWrapper.eq(StrUtil.isNotEmpty(docNameArr[1]), "u.doc_suffix", docNameArr[1]); } } queryWrapper.ge(StrUtil.isNotEmpty(docQuery.getStartTime()),"date_format(u.create_time,'%Y-%m-%d %H:%i:%s')",docQuery.getStartTime()); queryWrapper.le(StrUtil.isNotEmpty(docQuery.getEndTime()),"date_format(u.create_time,'%Y-%m-%d %H:%i:%s')",docQuery.getEndTime()); if(ValidateUtil.validateString(docQuery.getAscStr())) { String[] ascArr = docQuery.getAscStr().split(","); ((Page) pageData).setAsc(ascArr); } if(ValidateUtil.validateString(docQuery.getDescStr())) { String[] descStr = docQuery.getDescStr().split(","); ((Page) pageData).setDesc(descStr); } IPage docInfoIPage = super.getBaseMapper().findDeviceDocExtList(pageData, queryWrapper); if (docInfoIPage != null && docInfoIPage.getRecords() != null && !docInfoIPage.getRecords().isEmpty()) { for (DocInfo d : docInfoIPage.getRecords()) { d.setSyncStatus(2); } } return new QueryPageResponseResult<>(CommonCode.SUCCESS, docInfoIPage); } @Override public QueryListResponseResult findList(DocInfoQueryRequest docQuery) { if(docQuery == null || !ValidateUtil.validateString(docQuery.getAttributionId()) || !ValidateUtil.validateInteger(docQuery.getAttributionType()) || !ValidateUtil.validateString(docQuery.getDocClassCode())) { ExceptionCast.cast(CommonCode.INVALID_PARAM); } DocClassification docClassification = docClassificationService.getByCode(docQuery.getDocClassCode()); if(docClassification == null) { ExceptionCast.cast(CommonCode.INVALID_PAGE); } QueryWrapper queryWrapper = Wrappers.query(); queryWrapper.eq("r.attribution_type", docQuery.getAttributionType()).eq("r.attribution_id", docQuery.getAttributionId()) .eq("r.classification_id", docClassification.getClassificationId()); if (StringUtils.isNotEmpty(docQuery.getDocName())) { int dotIndex = docQuery.getDocName().lastIndexOf("."); if (dotIndex == -1) { queryWrapper.like("u.doc_name", docQuery.getDocName()); } else { String[] docNameArr = docQuery.getDocName().split("\\."); queryWrapper.like(StrUtil.isNotEmpty(docNameArr[0]), "u.doc_name", docNameArr[0]); queryWrapper.eq(StrUtil.isNotEmpty(docNameArr[1]), "u.doc_suffix", docNameArr[1]); } } queryWrapper.ge(StrUtil.isNotEmpty(docQuery.getStartTime()),"date_format(u.create_time,'%Y-%m-%d %H:%i:%s')",docQuery.getStartTime()); queryWrapper.le(StrUtil.isNotEmpty(docQuery.getEndTime()),"date_format(u.create_time,'%Y-%m-%d %H:%i:%s')",docQuery.getEndTime()); List docInfoIPage = super.getBaseMapper().findDocExtList(queryWrapper); return new QueryListResponseResult<>(CommonCode.SUCCESS, docInfoIPage); } @Override public List getByProcessIds(List streams) { List ids = new ArrayList<>(); for(ProcessStream s : streams) { ids.add(s.getProcessId()); } DocClassification docClassification = docClassificationService.getByCode("NC"); if(docClassification == null) { ExceptionCast.cast(CommonCode.INVALID_PAGE); } QueryWrapper queryWrapper = Wrappers.query(); queryWrapper.in("r.attribution_id", ids) .eq("r.classification_id", docClassification.getClassificationId()) .ne("u.doc_status", 3).isNotNull("u.publish_file_id"); return super.getBaseMapper().findDocExtList(queryWrapper); } @Override @Transactional(rollbackFor = {Exception.class}) public boolean batchRemoveDocInfo(String[] docIds) { if(docIds == null || docIds.length < 1) ExceptionCast.cast(CommonCode.INVALID_PARAM); for(String docId : docIds) { this.deleteDocInfo(docId); } return true; } @Override public ResponseResult downloadDocFile(HttpServletRequest request, HttpServletResponse response, String id) { if(!ValidateUtil.validateString(id)) ExceptionCast.cast(CommonCode.INVALID_PARAM); DocInfo en = super.getById(id); if(en == null) ExceptionCast.cast(DocumentCode.DOC_NOT_EXIST); if(!ValidateUtil.validateString(en.getPublishFileId())) ExceptionCast.cast(DocumentCode.DOC_PUBLISH_FILE_NONE); DocFile docFile = docFileService.getById(en.getPublishFileId()); if(docFile == null) ExceptionCast.cast(DocumentCode.DOC_PUBLISH_FILE_NOT_EXIST); if(!ValidateUtil.validateString(docFile.getFilePath()) || !ValidateUtil.validateString(docFile.getFileName()) || /*!ValidateUtil.validateString(docFile.getFileSuffix()) ||*/ !ValidateUtil.validateString(docFile.getFileEncodeName())) return new ResponseResult(CommonCode.FAIL); String fileName; if(ValidateUtil.validateString(docFile.getFileSuffix())) { fileName = docFile.getFileName() + "." + docFile.getFileSuffix(); }else { fileName = docFile.getFileName(); } String filePath = docFile.getFilePath(); String fileEncodeName = docFile.getFileEncodeName(); FileUtil.downLoadFile(response, fileEncodeName, filePath, fileName); return null; } }