From 418d29b85d943f57b5600d84acf9cf6ca0ce9173 Mon Sep 17 00:00:00 2001 From: hyingbo <1363390067@qq.com> Date: 星期四, 17 七月 2025 09:46:29 +0800 Subject: [PATCH] 工作流关闭 --- lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/DocInfoServiceImpl.java | 289 ++++++++++++++++++++++++++++++++++++++++++++++++++------- 1 files changed, 252 insertions(+), 37 deletions(-) diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/DocInfoServiceImpl.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/DocInfoServiceImpl.java index 7d4f340..a6f9814 100644 --- a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/DocInfoServiceImpl.java +++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/DocInfoServiceImpl.java @@ -1,5 +1,6 @@ package org.jeecg.modules.dnc.service.impl; +import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; @@ -11,9 +12,12 @@ import org.apache.shiro.SecurityUtils; import org.jeecg.common.api.vo.FileUploadResult; import org.jeecg.common.api.vo.Result; +import org.jeecg.common.exception.JeecgBootException; import org.jeecg.common.system.vo.LoginUser; import org.jeecg.modules.dnc.entity.*; import org.jeecg.modules.dnc.exception.ExceptionCast; +import org.jeecg.modules.dnc.ext.NcTxtFilePathInfo; +import org.jeecg.modules.dnc.listener.FileMonitorConfig; import org.jeecg.modules.dnc.mapper.DocInfoMapper; import org.jeecg.modules.dnc.request.DocInfoQueryRequest; import org.jeecg.modules.dnc.request.DocInfoUploadRequest; @@ -24,7 +28,14 @@ import org.jeecg.modules.dnc.utils.file.FileUtilS; import org.jeecg.modules.dncFlow.entity.DispatchFile; import org.jeecg.modules.dncFlow.service.IDispatchFileService; +import org.jeecg.modules.flowable.apithird.business.entity.FlowMyBusiness; +import org.jeecg.modules.flowable.apithird.business.service.IFlowMyBusinessService; +import org.jeecg.modules.flowable.service.IFlowTaskService; import org.jeecg.modules.mdc.entity.MdcEquipment; +import org.jeecg.modules.mdc.service.IMdcEquipmentService; +import org.jeecg.modules.system.entity.SysParams; +import org.jeecg.modules.system.service.IMdcProductionService; +import org.jeecg.modules.system.service.ISysParamsService; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Lazy; @@ -35,13 +46,22 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import java.util.Scanner; import java.util.stream.Collectors; @Service public class DocInfoServiceImpl extends ServiceImpl<DocInfoMapper, DocInfo> implements IDocInfoService { + @Autowired + private FileMonitorConfig config; + @Autowired + private IMdcEquipmentService iMdcEquipmentService; + @Autowired + private IMdcProductionService iMdcProductionService; @Autowired private IDocClassificationService docClassificationService; @Autowired @@ -52,12 +72,19 @@ @Lazy private IDocRelativeService docRelativeService; @Autowired - @Lazy - private IDeviceInfoService deviceInfoService; - @Autowired - private IDeviceGroupService deviceGroupService; - @Autowired private IDispatchFileService dispatchFileService; + @Autowired + private ISysParamsService sysParamsService; + @Autowired + @Lazy + private IComponentInfoService componentInfoService; + @Autowired + @Lazy + private IGuideCardBatchService guideCardBatchService; + @Autowired + private IFlowMyBusinessService flowMyBusinessService; + @Autowired + private IFlowTaskService flowTaskService; /*澶囦唤澶勭悊*/ @Override @@ -94,6 +121,19 @@ docRelative.setAttributionType(uploadRequest.getAttributionType()); docRelative.setClassificationId(docClass.getClassificationId()); boolean b = docRelativeService.save(docRelative); + if (uploadRequest.getAttributionType()==2){ + //鏌ヨ鍊熺敤鐨勯儴浠� + List<ComponentInfo> borrowComponentInfoList=componentInfoService.list(new QueryWrapper<ComponentInfo>().eq("borrow_id", uploadRequest.getAttributionId())); + if (!borrowComponentInfoList.isEmpty()) { + borrowComponentInfoList.forEach(item->{ + DocRelative borrowDocRelative = new DocRelative(); + BeanUtil.copyProperties(docRelative,borrowDocRelative); + borrowDocRelative.setAttributionId(item.getComponentId()); + borrowDocRelative.setId(null); + docRelativeService.save(borrowDocRelative); + }); + } + } if(!b) ExceptionCast.cast(DocumentCode.DOC_UPLOAD_ERROR); DocFile docFile = new DocFile(); @@ -109,43 +149,56 @@ docInfo.setPublishVersion(docFile.getDocVersion()); docInfo.setPublishFileId(docFile.getFileId()); //COPY - DeviceInfo deviceInfo= deviceInfoService.getById(uploadRequest.getAttributionId()); - if (deviceInfo != null) { - List<String> strings = deviceGroupService.findListParentTreeAll(deviceInfo.getGroupId()); + MdcEquipment mdcEquipment= iMdcEquipmentService.getById(uploadRequest.getAttributionId()); + if (mdcEquipment != null) { + List<String> strings = iMdcProductionService.findListParentTreeAll(mdcEquipment.getId()); boolean copyFileNc = false; if (strings != null && !strings.isEmpty()) { String path = org.apache.commons.lang3.StringUtils.join(strings.toArray(), "/"); copyFileNc = FileUtilS.copyFile(fileUploadResult.getFilePath()+"/" + fileUploadResult.getFileEncodeName(), - path+ "/" + deviceInfo.getDeviceNo() ,fileNameAll); + path+ "/" + mdcEquipment.getEquipmentId() ,fileNameAll); if (!copyFileNc) { ExceptionCast.cast(ActivitiCode.ACT_FILE_ERROR); } else { - FileUtilS.deleteZipFromToSend(path + "/"+ deviceInfo.getDeviceNo(), + FileUtilS.deleteZipFromToSend(path + "/"+ mdcEquipment.getEquipmentId(), docFile.getFileName(),docFile.getFileSuffix()); } } else { copyFileNc =FileUtilS.copyFile(fileUploadResult.getFilePath()+"/" + fileUploadResult.getFileEncodeName(), - deviceInfo.getDeviceNo() ,fileNameAll); + mdcEquipment.getEquipmentId() ,fileNameAll); if (!copyFileNc) { ExceptionCast.cast(ActivitiCode.ACT_FILE_ERROR); } else { - FileUtilS.deleteZipFromToSend(fileUploadResult.getFilePath()+"/" + fileUploadResult.getFileEncodeName() + "/"+ deviceInfo.getDeviceNo(), + FileUtilS.deleteZipFromToSend(fileUploadResult.getFilePath()+"/" + fileUploadResult.getFileEncodeName() + "/"+ mdcEquipment.getEquipmentId(), docFile.getFileName(),docFile.getFileSuffix()); } } } boolean saveBool = super.save(docInfo); - if (uploadRequest.getIsApprove()&&saveBool){ - //瑙﹀彂瀹$ - DispatchFile dispatchFile = new DispatchFile(); - dispatchFile.setDocId(docInfo.getDocId()); - dispatchFile.setFileId(docFile.getFileId()); - dispatchFile.setAttributionId(uploadRequest.getAttributionId()); - dispatchFile.setAttributionType(String.valueOf(uploadRequest.getAttributionType())); - dispatchFile.setDocClassCode(uploadRequest.getDocClassCode()); - dispatchFileService.saveDispatchFile(dispatchFile); + if (uploadRequest.getDocClassCode().equals("NC")||uploadRequest.getDocClassCode().equals("other")){ + SysParams sysParams=sysParamsService.getSysPramBySettingKey("nc_dispatch_file"); + if (sysParams ==null){ + throw new JeecgBootException("鏈厤缃鍏C涓庣數瀛愬浘鐗堟槸鍚﹁Е鍙戝绛炬祦绋嬶紝璇疯仈绯荤鐞嗗憳"); + }else { + if (saveBool&&sysParams.getSettingValue().equals("1")){ + //瑙﹀彂瀹$ + DispatchFile dispatchFile = new DispatchFile(); + dispatchFile.setDocId(docInfo.getDocId()); + dispatchFile.setFileId(docFile.getFileId()); + dispatchFile.setAttributionId(uploadRequest.getAttributionId()); + dispatchFile.setAttributionType(String.valueOf(uploadRequest.getAttributionType())); + dispatchFile.setDocClassCode(uploadRequest.getDocClassCode()); + dispatchFileService.saveDispatchFile(dispatchFile); + } + } + } + if (uploadRequest.getDocClassCode().equals("NC")){ + boolean savaGuideCardBatch=guideCardBatchService.importGuideCardBatch(docInfo.getDocId(),uploadRequest.getAttributionId(),uploadRequest.getAttributionType()); + if (!savaGuideCardBatch) { + ExceptionCast.cast(DocumentCode.DOC_BATCH_ERROR); + } } return saveBool; } @@ -174,8 +227,8 @@ if (StringUtils.isEmpty(deviceNo)) { return false; } - DeviceInfo deviceInfo = deviceInfoService.getByDeviceNo(deviceNo); - if (deviceInfo == null) { + MdcEquipment mdcEquipment = iMdcEquipmentService.findEquipmentNameByEquipmentId(deviceNo); + if (mdcEquipment == null) { return false; } String fileName = FileUtilS.getFilenameNonSuffix(file.getOriginalFilename()); @@ -184,7 +237,7 @@ if(fileUploadResult == null) { return false; } - DocInfo en = findByAttrAndDocName(fileName, 4, deviceInfo.getDeviceId()); + DocInfo en = findByAttrAndDocName(fileName, 7, mdcEquipment.getId()); if(en != null) { return false; } @@ -197,9 +250,9 @@ docInfo.setDocStatus(1); docInfo.setSyncStatus(2); DocRelative docRelative = new DocRelative(); - docRelative.setAttributionId(deviceInfo.getDeviceId()); + docRelative.setAttributionId(mdcEquipment.getId()); docRelative.setDocId(docInfo.getDocId()); - docRelative.setAttributionType(4); + docRelative.setAttributionType(7); docRelative.setClassificationId(docClass.getClassificationId()); boolean b = docRelativeService.save(docRelative); if(!b) { @@ -222,6 +275,94 @@ return saveBool; } + /** + * 瑙f瀽NC鏂囨。閫氱敤鏂规硶 + * @param pathFile,fileRec + * @return + */ + @Override + @Transactional(rollbackFor = {Exception.class}) + public boolean addDocInfoAnalysisGwNcService(String pathFile,File file) throws FileNotFoundException { + String line; + int count = 0; + String loFilePath = config.getPaths().get(0)+"/" + file.getName(); + FileInputStream fis = new FileInputStream(loFilePath); + NcTxtFilePathInfo result = new NcTxtFilePathInfo(); + Scanner sc = new Scanner(fis, "UTF-8"); + while (count < 8 && sc.hasNext()) { + line = sc.nextLine(); + if (count ==0) { + result.setFileTxtName(line.trim()); + } else if (count ==1) { + result.setFileNcName(line.trim()); + }else if (count ==2) { + result.setOrigFileName(line.trim()); + }else if (count ==3) { + result.setOrigFileSuffix(line.trim()); + }else if (count ==4) { + result.setFilePath(line.trim()); + }else if (count ==5) { + result.setEquipmentId(line.trim()); + }else if (count ==6) { + result.setFileAddOrDelete(Integer.valueOf(line.trim())); + }else if (count == 7) { + result.setFileSize(line.trim()); + } + count++; + } + sc.close(); + if (result.getFileAddOrDelete() != null ) { + if ( result.getFileAddOrDelete()==1) { + String path = config.getPaths().get(0) +"/" + result.getFileNcName()+ ".NC"; + if (org.apache.commons.lang3.StringUtils.isNotBlank(result.getFileNcName()) && + result.getFileNcName().equals("null")) { + //鏂囦欢寰呭鐞� + //澶囦唤鏁版嵁 + FileUtilS.deleteFileNewRec(loFilePath); + } + File ncFile = new File(path); + //宸茬粡瀛樺湪鏂囦欢闇�瑕佸浠� + String size = String.valueOf(ncFile.length()); + if (!size.equals(result.getFileSize())) { + return false; + } + boolean bool = this.addDocInfoRecService(result.getEquipmentId(), + ncFile,result.getOrigFileSuffix(), + FileUtilS.getFilenameNonSuffix(result.getOrigFileName()) + ,result.getFilePath()); + if (bool) { + FileUtilS.deleteFileNewRec(path); + FileUtilS.deleteFileNewRec(loFilePath); + }else { + return false; + } + } + } + return true; + } + + + /** + * 绋嬪簭鍥炰紶锛堟秹瀵嗚В鏋愬伐鎺э級 + * @param pathFile + */ + @Override + @Transactional(rollbackFor = {Exception.class}) + public boolean addDocInfoAnalysisSmwNcService(String pathFile,File fileRec){ + //纭瑙f瀽鐩綍 + return true; + } + + /** + * 鏂囨。瑙f瀽 + * todo 淇敼鍒涘缓鏂囦欢鍏宠仈鍏崇郴锛屾敼鎴愬浐瀹歞ocId锛屽幓闄ゅ垱寤篋ocInfo + * @param equipmentId + * @param fileRec + * @param fileNameSuffix + * @param fileNameNew + * @param filePath + * @return + */ @Override @Transactional(rollbackFor = {Exception.class}) public boolean addDocInfoRecService(String equipmentId,File fileRec,String fileNameSuffix,String fileNameNew,String filePath ) { @@ -234,12 +375,11 @@ ExceptionCast.cast(DocumentCode.DOC_CLASS_ERROR); } //鏍规嵁璁惧缂栧彿鏌ヨ鏁版嵁 - String deviceNo = equipmentId; - if (StringUtils.isEmpty(deviceNo)) { + if (StringUtils.isEmpty(equipmentId)) { return false; } - DeviceInfo deviceInfo = deviceInfoService.getByDeviceNo(deviceNo); - if (deviceInfo == null) { + MdcEquipment mdcEquipment = iMdcEquipmentService.findEquipmentNameByEquipmentId(equipmentId); + if (mdcEquipment == null) { return false; } String fileName = FileUtilS.getFilenameNonSuffix(file.getOriginalFilename()); @@ -248,7 +388,7 @@ if(fileUploadResult == null) { return false; } - DocInfo en = findByAttrAndDocName(fileName, 4, deviceInfo.getDeviceId()); + DocInfo en = findByAttrAndDocName(fileName, 7, mdcEquipment.getId()); if(en != null) { return false; } @@ -261,9 +401,9 @@ docInfo.setDocStatus(1); docInfo.setSyncStatus(2); DocRelative docRelative = new DocRelative(); - docRelative.setAttributionId(deviceInfo.getDeviceId()); + docRelative.setAttributionId(mdcEquipment.getId()); docRelative.setDocId(docInfo.getDocId()); - docRelative.setAttributionType(4); + docRelative.setAttributionType(7); docRelative.setClassificationId(docClass.getClassificationId()); boolean b = docRelativeService.save(docRelative); if(!b) { @@ -308,7 +448,7 @@ @Override @Transactional(rollbackFor = {Exception.class}) - public boolean deleteDocInfo(String id) { + public boolean deleteDocInfo(String id,String attrType,String attrId) { if(!ValidateUtil.validateString(id)) ExceptionCast.cast(CommonCode.INVALID_PARAM); DocInfo en = super.getById(id); @@ -316,6 +456,20 @@ ExceptionCast.cast(DocumentCode.DOC_NOT_EXIST); if(en.getDocStatus() != 1) ExceptionCast.cast(DocumentCode.DOC_DEL_ERROR); + //鏌ヨ瀵瑰簲鐨勫叧绯� + if ("2".equals(attrType)) { + //鍒ゆ柇閮ㄤ欢寮曠敤 + ComponentInfo componentInfo=componentInfoService.getById(attrId); + if(componentInfo!=null&&componentInfo.getBorrowId()!=null){ + //鍊熺敤鐨勯儴浠讹紝鍙垹闄よ嚜宸辩殑鍏崇郴 + DocRelative docRelative=docRelativeService.getOne(new QueryWrapper<DocRelative>() + .eq("attribution_id", attrId).eq("attribution_type", 2).eq("doc_id",id)); + if(docRelative!=null){ + docRelativeService.removeById(docRelative.getId()); + return true; + } + } + } FileOperate operate = fileOperateService.getByDocId(id); if(operate != null) ExceptionCast.cast(DocumentCode.DOC_IS_OPERATING); @@ -325,6 +479,14 @@ b = docRelativeService.deleteByDocId(id); if(!b) ExceptionCast.cast(CommonCode.FAIL); + //寮哄埗缁撴潫娴佺▼ 鍒犻櫎鐢ㄦ埛鐨勬寰呭姙浠诲姟 + List<DispatchFile> dispatchFiles=dispatchFileService.list(new QueryWrapper<DispatchFile>().eq("doc_id",id)); + if (dispatchFiles != null && !dispatchFiles.isEmpty()) { + FlowMyBusiness flowMyBusiness = flowMyBusinessService.selectByDataId(dispatchFiles.get(0).getId()); + if (flowMyBusiness != null) { + flowTaskService.end(flowMyBusiness.getProcessInstanceId(), "鍒犻櫎鏂囨。"); + } + } return super.removeById(id); } @@ -528,6 +690,13 @@ }else { queryWrapper.eq(StrUtil.isNotEmpty(docQuery.getDocStatus()),"u.doc_status",docQuery.getDocStatus()); } + if (docQuery.getDocDispatchStatus() != null && docQuery.getDocDispatchStatus().contains(",")) { + String[] docDispatchStatusArray = docQuery.getDocDispatchStatus().split(","); + List<Integer> docDispatchStatusList = Arrays.stream(docDispatchStatusArray).map(Integer::parseInt).collect(Collectors.toList()); + queryWrapper.in("u.doc_dispatch_status",docDispatchStatusList); + }else { + queryWrapper.eq(StrUtil.isNotEmpty(docQuery.getDocDispatchStatus()),"u.doc_dispatch_status",docQuery.getDocDispatchStatus()); + } if (StrUtil.isNotEmpty(docQuery.getPullStatus())){ if (("1").equals(docQuery.getPullStatus())){ queryWrapper.isNull("o.doc_id"); @@ -619,7 +788,7 @@ public boolean deleteByDeviceId(String deviceId) { if(!ValidateUtil.validateString(deviceId)) ExceptionCast.cast(CommonCode.INVALID_PARAM); - Integer attrType = 4; + Integer attrType = 7; /*boolean b = docFileService.deleteByDocAttr(attrType, deviceId); if(!b) ExceptionCast.cast(CommonCode.FAIL); @@ -754,6 +923,13 @@ }else { queryWrapper.eq(StrUtil.isNotEmpty(docQuery.getDocStatus()),"u.doc_status",docQuery.getDocStatus()); } + if (docQuery.getDocDispatchStatus() != null && docQuery.getDocDispatchStatus().contains(",")) { + String[] docDispatchStatusArray = docQuery.getDocDispatchStatus().split(","); + List<Integer> docDispatchStatusList = Arrays.stream(docDispatchStatusArray).map(Integer::parseInt).collect(Collectors.toList()); + queryWrapper.in("u.doc_dispatch_status",docDispatchStatusList); + }else { + queryWrapper.eq(StrUtil.isNotEmpty(docQuery.getDocDispatchStatus()),"u.doc_dispatch_status",docQuery.getDocDispatchStatus()); + } if (StrUtil.isNotEmpty(docQuery.getPullStatus())){ if (("1").equals(docQuery.getPullStatus())){ queryWrapper.isNull("o.doc_id"); @@ -814,6 +990,45 @@ return super.getBaseMapper().findDocExtList(queryWrapper); } + /** + * 閫氳繃涓�缁刟ttributionId,docClassCode,attributionType鏌ヨ鍙寚娲剧殑鏂囨。淇℃伅鍒楄〃 + * @param docQuery + * @return + */ + @Override + public List<DocInfo> findListByDocQuery(DocInfoQueryRequest docQuery){ + if(docQuery == null || !ValidateUtil.validateString(docQuery.getAttributionIds()) + || !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); + } + List<String> attributionIds = Arrays.asList(docQuery.getAttributionIds().split(",")); + + QueryWrapper<DocInfo> queryWrapper = Wrappers.query(); + queryWrapper.eq(StrUtil.isNotEmpty(docQuery.getDocId()),"u.doc_id",docQuery.getDocId()); + queryWrapper.eq("r.attribution_type", docQuery.getAttributionType()) + .in("r.attribution_id", attributionIds) + .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]); + } + } + getDocQuery(docQuery, queryWrapper); + return super.getBaseMapper().findDocExtList(queryWrapper); + } + + + @Override public List<DocInfo> getByProcessIds(List<ProcessStream> streams) { List<String> ids = new ArrayList<>(); @@ -833,11 +1048,11 @@ @Override @Transactional(rollbackFor = {Exception.class}) - public boolean batchRemoveDocInfo(String[] docIds) { + public boolean batchRemoveDocInfo(String[] docIds,String attrType,String attrId) { if(docIds == null || docIds.length < 1) ExceptionCast.cast(CommonCode.INVALID_PARAM); for(String docId : docIds) { - this.deleteDocInfo(docId); + this.deleteDocInfo(docId,attrType,attrId); } return true; } -- Gitblit v1.9.3