From 23855599412c4d61b38d78f0f3abd3430a48b5b1 Mon Sep 17 00:00:00 2001 From: zhangherong <571457620@qq.com> Date: 星期三, 25 六月 2025 11:51:38 +0800 Subject: [PATCH] Merge branch 'mdc_hyjs_master' --- lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/service/impl/AssignFileStreamServiceImpl.java | 722 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 722 insertions(+), 0 deletions(-) diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/service/impl/AssignFileStreamServiceImpl.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/service/impl/AssignFileStreamServiceImpl.java new file mode 100644 index 0000000..18f1a94 --- /dev/null +++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/service/impl/AssignFileStreamServiceImpl.java @@ -0,0 +1,722 @@ +package org.jeecg.modules.dncFlow.service.impl; + +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSON; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +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.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.apache.commons.lang3.StringUtils; +import org.apache.shiro.SecurityUtils; +import org.flowable.engine.TaskService; +import org.flowable.engine.runtime.ProcessInstance; +import org.flowable.task.api.Task; +import org.jeecg.common.api.vo.Result; +import org.jeecg.common.system.vo.LoginUser; +import org.jeecg.modules.dnc.constant.DncPassLogPassType; +import org.jeecg.modules.dnc.constant.DocAttributionTypeEnum; +import org.jeecg.modules.dnc.dto.TransferPackage; +import org.jeecg.modules.dnc.entity.*; +import org.jeecg.modules.dnc.exception.ExceptionCast; +import org.jeecg.modules.dnc.response.*; +import org.jeecg.modules.dnc.service.*; +import org.jeecg.modules.dnc.service.impl.FileFerryService; +import org.jeecg.modules.dnc.utils.ValidateUtil; +import org.jeecg.modules.dnc.utils.date.DateUtil; +import org.jeecg.modules.dnc.utils.file.FileUtilS; +import org.jeecg.modules.dncFlow.entity.AssignFileStream; +import org.jeecg.modules.dncFlow.ext.AssignFileStreamExt; +import org.jeecg.modules.dncFlow.mapper.AssignFileStreamMapper; +import org.jeecg.modules.dncFlow.request.ApproveBatchRequest; +import org.jeecg.modules.dncFlow.request.AssignFileRequest; +import org.jeecg.modules.dncFlow.request.AssignFileStreamQueryRequest; +import org.jeecg.modules.dncFlow.request.TaskRequest; +import org.jeecg.modules.dncFlow.service.IAssignFileStreamService; +import org.jeecg.modules.dncFlow.vo.AssignFlowTaskVo; +import org.jeecg.modules.flowable.apithird.business.entity.FlowMyBusiness; +import org.jeecg.modules.flowable.apithird.business.service.IFlowMyBusinessService; +import org.jeecg.modules.flowable.apithird.service.FlowCallBackServiceI; +import org.jeecg.modules.flowable.apithird.service.FlowCommonService; +import org.jeecg.modules.flowable.domain.vo.FlowTaskVo; +import org.jeecg.modules.flowable.service.IFlowDefinitionService; +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.service.IMdcProductionService; +import org.springframework.beans.BeanUtils; +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 javax.annotation.Resource; +import java.util.*; +import java.util.stream.Collectors; + +@Service("IAssignFileStreamService") +public class AssignFileStreamServiceImpl extends ServiceImpl<AssignFileStreamMapper, AssignFileStream> implements IAssignFileStreamService , FlowCallBackServiceI { + private static final String PROCESS_KEY = "assign_nc_to_device"; + private static final String SEND_CODE = "SEND"; + @Value("${flowable.enable}") + private Boolean flowableEnable; + @Value("${fileHomePath}") + private String fileHomePath; + @Autowired + private IDocInfoService docInfoService; + @Autowired + private IDocClassificationService classificationService; + @Autowired + private IDocFileService docFileService; + @Autowired + private IDocRelativeService docRelativeService; + @Autowired + private ISynchronizedFlagService synchronizedFlagService; + @Autowired + private IDeviceCharactersService iDeviceCharactersService; + @Autowired + private IMdcEquipmentService iMdcEquipmentService; + @Autowired + private IMdcProductionService iMdcProductionService; + @Autowired + private TaskService taskService; + @Resource + private FlowCommonService flowCommonService; + @Resource + private IFlowDefinitionService flowDefinitionService; + @Autowired + private IFlowTaskService flowTaskService; + @Autowired + private IFlowMyBusinessService flowMyBusinessService; + @Autowired + private PermissionService permissionService; + @Autowired + private IDncPassLogService dncPassLogService; + @Value("${deploy.secretFolder}") + private String secretFolder; //娑夊瘑缃戜紶杈搉c鏂囦欢澶� + @Autowired + private FileFerryService ferryService; + @Autowired + private IDocClassificationService iDocClassificationService; + @Override + @Transactional(rollbackFor = {Exception.class}) + public Result<?> applyAssignFile(AssignFileStream stream) { + synchronized (this){ + //鍒ゆ柇璁惧鐗规畩瀛楃 + String specialChar = getDeviceSpecialChar(stream.getDeviceId(),stream.getFileId()); + if (StrUtil.isNotEmpty(specialChar)){ + //鎶涘嚭鐗规畩瀛楃寮傚父 + return Result.error("鏂囦欢鍚嶇О瀛樺湪璁惧鐗规畩瀛楃"); + } + //鏌ヨ鏂囨。鐨勭姸鎬侊紝鎵瑰噯鐘舵�佹墠鍙互鎸囨淳 + DocInfo docInfo=getDocInfo(stream); + DocClassification docClassification=iDocClassificationService.getById(docInfo.getClassificationId()); + if (docInfo.getDocDispatchStatus()!=null&&docInfo.getDocDispatchStatus()!=3&&docClassification.getClassificationCode().equals("nc")){ + return Result.error("璇ユ枃浠剁姸鎬佷笉鍏佽鎸囨淳,璇峰厛瀹屾垚瀹$娴佺▼"); + } + if(flowableEnable) { + return applyAssignFileActive(stream); + }else { + return applyAssignFileNonActive(stream); + } + } + } + + /** + * 鍒ゆ柇璁惧鐗规畩瀛楃 + * @param deviceId,fileId + * 璁惧ID锛屾枃浠禝D + */ + public String getDeviceSpecialChar(String deviceId, String fileId){ + //鏇挎崲涓簃dc璁惧琛� + MdcEquipment mdcEquipment = iMdcEquipmentService.getById(deviceId); + if(mdcEquipment == null) + ExceptionCast.cast(ActivitiCode.ACT_ASSIGN_DEVICE_NONE); +// DocFile docFile = docFileService.getById(fileId); + DocInfo docInfo = docInfoService.getOne(new QueryWrapper<DocInfo>().eq("publish_file_id",fileId)); + if(docInfo == null) + ExceptionCast.cast(ActivitiCode.ACT_FILE_ERROR); + List<DeviceCharacters> deviceCharactersList=iDeviceCharactersService.list( + new LambdaQueryWrapper<DeviceCharacters>().eq(DeviceCharacters::getDeviceNo,mdcEquipment.getEquipmentId())); + if (deviceCharactersList.isEmpty()){ + return ""; + }else { + List<String> specialCharList=deviceCharactersList.stream().map(DeviceCharacters::getCharacters).collect(Collectors.toList()); + if(!specialCharList.isEmpty()){ + //瀵规瘮鏂囦欢鍚嶆槸鍚﹀寘鍚壒娈婂瓧绗� + String fileName=docInfo.getDocName(); + for(String specialChar:specialCharList){ + if (fileName.contains(specialChar)){ + return specialChar; + } + } + }else { + return ""; + } + } + return ""; + } + + private ResponseResult createSpecialCharErrorResponse(String specialChar) { + return new ResponseResult(new ResultCode() { + @Override + public boolean success() { + return false; + } + @Override + public int code() { + return 88881; + } + @Override + public String message() { + return "鏂囦欢鍚嶇О瀛樺湪璁惧鐗规畩瀛楃" + specialChar; + } + }); + } + + @Override + @Transactional(rollbackFor = {Exception.class}) + public Result<?> applyAssignFileActive(AssignFileStream stream) { + validateParams(stream); + DocInfo docInfo = getDocInfo(stream); + MdcEquipment mdcEquipment = getMdcEquipment(stream); + DocFile docFile = docFileService.getById(stream.getFileId()); + DocInfo deviceDoc = docInfoService.getByDocAttrAndDocId(stream.getDocId(), 7, stream.getDeviceId()); + if (deviceDoc != null) { + handleExistingDeviceDoc(docFile, mdcEquipment, stream.getDeviceId()); + } + deviceDoc = docInfoService.findByAttrAndDocName(docInfo.getDocName(), 7, stream.getDeviceId()); + if (deviceDoc != null) { + handleExistingDeviceDoc(docFile, mdcEquipment, stream.getDeviceId()); + } + PermissionStreamNew permissionStreams = getPermissionStreams(stream); + if (permissionStreams==null){ + return Result.error("鐢ㄦ埛娌℃湁鏉冮檺"); + } + LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + String userId = user.getId(); + saveBusinessObject(stream, userId); + System.out.println("鎸囨淳NC鏂囨。鍒拌澶囨祦绋嬶細" + stream.getDocId()); + flowCommonService.initActBusiness("鎸囨淳NC鏂囨。鍒拌澶囨祦绋嬶細" +docInfo.getDocName()+"."+docInfo.getDocSuffix()+"鍒拌澶�->"+mdcEquipment.getEquipmentName() , + stream.getStreamId(), "IAssignFileStreamService", "assign_nc_to_device", null); + Map<String, Object> variables = new HashMap<>(); + variables.put("dataId", stream.getStreamId()); + if (stream.getApplyReason() != null) { + variables.put("organization", stream.getApplyReason()); + }else { + variables.put("organization", ""); + } + Result result= flowDefinitionService.startProcessInstanceByKey("assign_nc_to_device", variables); + if (result.isSuccess()){ + return Result.OK("鎿嶄綔鎴愬姛"); + }else { + super.removeById(stream.getStreamId()); + + return Result.error("鎿嶄綔澶辫触"); + } + } + + @Override + @Transactional(rollbackFor = {Exception.class}) + public Result<?> applyAssignFileNonActive(AssignFileStream stream) { + //鏉冮檺鏍¢獙 + validateParams(stream); + DocInfo docInfo = getDocInfo(stream); + //淇敼鍘熸湁鐘舵�� + docInfo.setDocDispatchStatus(4); + docInfoService.updateById(docInfo); + MdcEquipment mdcEquipment = getMdcEquipment(stream); + DocFile docFile = getDocFile(stream); + DocInfo deviceDoc = docInfoService.getByDocAttrAndDocId(stream.getDocId(), 7, stream.getDeviceId()); + if(deviceDoc != null) { + // 鍒犻櫎 澶囦唤 瑕嗙洊 鍘熸湁鐨� + List<String> strings=iMdcProductionService.findListParentTreeAll(mdcEquipment.getId()); + if (strings != null && !strings.isEmpty()) { + String path = StringUtils.join(strings.toArray(), "/"); + boolean copyFileNc = FileUtilS.copyFileNcToBak(path + "/"+ mdcEquipment.getEquipmentId(), + docFile.getFileName(), docFile.getFileSuffix()); + } + } + getPermissionStreams(stream); + //鎻掑叆鏂囨。鍒拌澶囧彂閫佹枃妗� + if(deviceDoc == null) { + DocClassification classification = classificationService.getByCode(SEND_CODE); + if(classification == null) + ExceptionCast.cast(DocumentCode.DOC_CLASS_ERROR); + DocRelative docRelative = new DocRelative(); + docRelative.setDocId(docInfo.getDocId()); + docRelative.setClassificationId(classification.getClassificationId()); + docRelative.setAttributionType(7); + docRelative.setAttributionId(stream.getDeviceId()); + boolean b = docRelativeService.save(docRelative); + if(!b) { + ExceptionCast.cast(ActivitiCode.ACT_APPROVE_ERROR); + } + + } + List<DocRelative> docRelativeList=docRelativeService. + list(new QueryWrapper<DocRelative>() + .eq("attribution_type",stream.getAttributionType()) + .eq("attribution_id",stream.getAttributionId()) + .eq("doc_id",stream.getDocId())); + if (docRelativeList.isEmpty()){ + ExceptionCast.cast(ActivitiCode.ACT_APPROVE_ERROR); + } + handleFileTransfer(mdcEquipment, docFile); + //NC鏂囦欢鐨勬嫹璐� + handleFileProcessing(docFile, mdcEquipment, secretFolder); + //瀵瑰簲浜у搧缁撴瀯鏍戞嫹璐� + handleProductTree(docInfo,docRelativeList.get(0),mdcEquipment.getEquipmentId()); + synchronizedFlagService.updateFlag(2); + return Result.OK("鎿嶄綔鎴愬姛"); + } + + @Override + public AssignFileStreamExt getAssignFileStreamDetail(String streamId) { + if(!ValidateUtil.validateString(streamId)) + return null; + return super.getBaseMapper().getAssignFileStreamDetail(streamId); + } + + @Override + @Transactional(rollbackFor = {Exception.class}) + public boolean approveAssignFile(AssignFlowTaskVo assignFlowTaskVo) { + if(!ValidateUtil.validateString(assignFlowTaskVo.getTaskId()) || !ValidateUtil.validateString(assignFlowTaskVo.getDataId()) || assignFlowTaskVo == null) + ExceptionCast.cast(CommonCode.INVALID_PARAM); + LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + String userId = user.getId(); + if(!ValidateUtil.validateString(userId)) + ExceptionCast.cast(UcenterCode.UCENTER_ACCOUNT_NOT_EXIST); + if(!ValidateUtil.validateInteger(assignFlowTaskVo.getStatus())) + ExceptionCast.cast(ActivitiCode.ACT_STATUS_ERROR); + AssignFileStream en = super.getById(assignFlowTaskVo.getDataId()); + if(en == null) + ExceptionCast.cast(ActivitiCode.ACT_BUSINESS_DETAIL_ERROR); + //flowable澶勭悊 + FlowTaskVo flowTaskVo = new FlowTaskVo(); + BeanUtils.copyProperties(assignFlowTaskVo, flowTaskVo); + + List<FlowMyBusiness> businessList = flowMyBusinessService.list( + new QueryWrapper<FlowMyBusiness>() + .eq("process_instance_id", assignFlowTaskVo.getInstanceId()) + ); + if (businessList.isEmpty()) { + return false; + } + FlowMyBusiness flowMyBusiness = businessList.get(0); + List<String> todoUsers = JSON.parseArray(flowMyBusiness.getTodoUsers(), String.class); + if (todoUsers == null || !todoUsers.contains(user.getUsername())) { + return false; + } + + // 4. 璁ら浠诲姟锛堝鐞嗗凡琚棰嗙殑鎯呭喌锛� + String taskId = flowMyBusiness.getTaskId(); + Task task = taskService.createTaskQuery().taskId(taskId).singleResult(); + if (task == null) { + return false; + } + if (task.getAssignee() != null && !task.getAssignee().equals(user.getUsername())) { + return false; + } + taskService.claim(taskId, user.getUsername()); + Map<String, Object> values=new HashMap<>(); + values.put("dataId", assignFlowTaskVo.getDataId()); + flowTaskVo.setTaskId(assignFlowTaskVo.getTaskId()); + flowTaskVo.setValues(values); + flowTaskService.complete(flowTaskVo); + //鏇存柊瀵硅薄灏佽 + AssignFileStream up = new AssignFileStream(); + up.setApproveContent(assignFlowTaskVo.getApproveContent()); + up.setStatus(assignFlowTaskVo.getStatus()); + up.setApproveUserId(userId); + up.setApproveTime(DateUtil.getNow()); + up.setStreamId(assignFlowTaskVo.getDataId()); + boolean b = super.updateById(up); + if(!b) + ExceptionCast.cast(ActivitiCode.ACT_APPROVE_ERROR); + if(up.getStatus() == 2) { + //鍚屾剰鎿嶄綔 + DocInfo docInfo = docInfoService.getByDocAttrAndDocId(en.getDocId(), Integer.valueOf(en.getAttributionType()), en.getAttributionId()); + if(docInfo == null ) + ExceptionCast.cast(ActivitiCode.ACT_DOC_ERROR); + MdcEquipment mdcEquipment = iMdcEquipmentService.getById(en.getDeviceId()); + if(mdcEquipment == null) + ExceptionCast.cast(ActivitiCode.ACT_ASSIGN_DEVICE_NONE); + DocFile docFile = docFileService.getById(en.getFileId()); + if(docFile == null) + ExceptionCast.cast(ActivitiCode.ACT_FILE_ERROR); + //淇敼鍘熸湁鐘舵�� + docInfo.setDocDispatchStatus(4); + docInfoService.updateById(docInfo); + DocInfo deviceDoc = docInfoService.getByDocAttrAndDocId(en.getDocId(),7, en.getDeviceId()); + if(deviceDoc != null) { + // 鍒犻櫎 澶囦唤 瑕嗙洊 鍘熸湁鐨� + List<String> strings = iMdcProductionService.findListParentTreeAll(mdcEquipment.getId()); + if (strings != null && !strings.isEmpty()) { + String path = StringUtils.join(strings.toArray(), "/"); + boolean copyFileNc = FileUtilS.copyFileNcToBak(path + "/"+ mdcEquipment.getEquipmentId(), + docFile.getFileName(), docFile.getFileSuffix()); + /* //docInfoService.getBaseMapper().deleteById(deviceDoc.getDocId()); + boolean doc = docRelativeService.deleteCopyDocByAttrNext(deviceDoc.getDocId(),7,stream.getDeviceId()); + if (!doc) { + ExceptionCast.cast(ActivitiCode.ACT_DOC_ERROR_DELEVE); + }*/ + } + } else { + //鎻掑叆鏂囨。鍒拌澶囧彂閫佹枃妗� + DocClassification classification = classificationService.getByCode(SEND_CODE); + if(classification == null) + ExceptionCast.cast(DocumentCode.DOC_CLASS_ERROR); + + DocRelative docRelative = new DocRelative(); + docRelative.setDocId(docInfo.getDocId()); + docRelative.setClassificationId(classification.getClassificationId()); + docRelative.setAttributionType(7); + docRelative.setAttributionId(en.getDeviceId()); + b = docRelativeService.save(docRelative); + } + if(!b) + ExceptionCast.cast(ActivitiCode.ACT_APPROVE_ERROR); + if (mdcEquipment != null) { + List<String> strings = iMdcProductionService.findListParentTreeAll(mdcEquipment.getId()); + if (strings != null && !strings.isEmpty()) { + String path = StringUtils.join(strings.toArray(), "/"); + boolean copyFileNc = FileUtilS.copyFileNc(docFile.getFilePath(),path + "/"+ mdcEquipment.getEquipmentId(), + docFile.getFileEncodeName(), + docFile.getFileName(),docFile.getFileSuffix()); + if (!copyFileNc) { + ExceptionCast.cast(ActivitiCode.ACT_FILE_ERROR); + } else { + FileUtilS.deleteZipFromToSend(path + "/"+ mdcEquipment.getEquipmentId(), + docFile.getFileName(),docFile.getFileSuffix()); + } + } + } + List<DocRelative> docRelativeList=docRelativeService. + list(new QueryWrapper<DocRelative>() + .eq("attribution_type",en.getAttributionType()) + .eq("attribution_id",en.getAttributionId()) + .eq("doc_id",en.getDocId())); + if (docRelativeList.isEmpty()){ + ExceptionCast.cast(ActivitiCode.ACT_APPROVE_ERROR); + } + //娑夊瘑缃戣繘琛孨C鏂囦欢鐨勬嫹璐� + handleFileTransfer(mdcEquipment, docFile); + //NC鏂囦欢鐨勬嫹璐� + handleFileProcessing(docFile, mdcEquipment, secretFolder); + //瀵瑰簲浜у搧缁撴瀯鏍戞嫹璐� + handleProductTree(docInfo,docRelativeList.get(0),mdcEquipment.getEquipmentId()); + return synchronizedFlagService.updateFlag(1); + }else if(up.getStatus() == 3) { + //鎷掔粷鎿嶄綔 浠�涔堜篃涓嶅仛 + return true; + }else { + ExceptionCast.cast(ActivitiCode.ACT_APPROVE_ERROR); + } + return false; + } + + @Override + @Transactional(rollbackFor = {Exception.class}) + public boolean applyBatchAssignFile(AssignFileRequest assignFileRequest) { + if(assignFileRequest == null) + ExceptionCast.cast(CommonCode.INVALID_PARAM); + String[] deviceIds = assignFileRequest.getDeviceIds(); + if(deviceIds == null || deviceIds.length < 1) + ExceptionCast.cast(ActivitiCode.ACT_ASSIGN_DEVICE_NONE); + AssignFileStream stream; + for(String id : deviceIds) { + stream = new AssignFileStream(); + stream.setProcessId(assignFileRequest.getProcessId()); + stream.setStepId(assignFileRequest.getStepId()); + stream.setDocId(assignFileRequest.getDocId()); + stream.setFileId(assignFileRequest.getFileId()); + stream.setApplyReason(assignFileRequest.getApplyReason()); + stream.setDeviceId(id); + Result b = applyAssignFile(stream); + if(!b.isSuccess()) + ExceptionCast.cast(ActivitiCode.ACT_APPLY_ERROR); + } + return true; + } + + @Override + @Transactional(rollbackFor = {Exception.class}) + public boolean approveBatchAssignFile(ApproveBatchRequest approveBatchRequest) { + if(approveBatchRequest == null) + ExceptionCast.cast(CommonCode.INVALID_PARAM); + List<TaskRequest> list = approveBatchRequest.getTaskArr(); + if(list == null || list.isEmpty()) + ExceptionCast.cast(CommonCode.INVALID_PARAM); + return synchronizedFlagService.updateFlag(1); + } + + @Override + public Result<?> findPageList(int page, int size, AssignFileStreamQueryRequest request) { + if(page < 1 || size < 1) { + ExceptionCast.cast(CommonCode.INVALID_PAGE); + } + LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + String userId = user.getId(); + if(!ValidateUtil.validateString(userId)) + ExceptionCast.cast(UcenterCode.UCENTER_ACCOUNT_NOT_EXIST); + LambdaQueryWrapper<AssignFileStreamExt> lambdaQueryWrapper = Wrappers.lambdaQuery(); + lambdaQueryWrapper.eq(AssignFileStreamExt::getApproveUserId, userId); + lambdaQueryWrapper.orderByDesc(AssignFileStreamExt::getApproveTime); + IPage<AssignFileStreamExt> pageData = new Page<>(page, size); + if(request != null) { + if(ValidateUtil.validateString(request.getAscStr())) { + String[] ascArr = request.getAscStr().split(","); +// ((Page<AssignFileStreamExt>) pageData).setAsc(ascArr); + } + if(ValidateUtil.validateString(request.getDescStr())) { + String[] descStr = request.getDescStr().split(","); +// ((Page<AssignFileStreamExt>) pageData).setDesc(descStr); + } + } + IPage<AssignFileStreamExt> streamExtIPage = super.getBaseMapper().findByPage(pageData, lambdaQueryWrapper); + return Result.ok(streamExtIPage); + } + + @Override + public QueryPageResponseResult<AssignFileStreamExt> findPageListByDocId(int page, int size, String docId) { + if(page < 1 || size < 1) { + ExceptionCast.cast(CommonCode.INVALID_PAGE); + } + if(!ValidateUtil.validateString(docId)) + ExceptionCast.cast(ActivitiCode.ACT_DOC_ID_NONE); + QueryWrapper<AssignFileStreamExt> queryWrapper = Wrappers.query(); + queryWrapper.eq("a.doc_id", docId); + queryWrapper.orderByDesc("approve_time"); + IPage<AssignFileStreamExt> pageData = new Page<>(page, size); + IPage<AssignFileStreamExt> streamExtIPage = super.getBaseMapper().findByPage(pageData, queryWrapper); + return new QueryPageResponseResult<>(CommonCode.SUCCESS, streamExtIPage); + } + + @Override + public Boolean getFlowableEnable(){ + if(flowableEnable != null) { + return flowableEnable; + } + return false; + } + + //浼犲弬楠岃瘉 + private void validateParams(AssignFileStream stream) { + if (stream == null) { + ExceptionCast.cast(CommonCode.INVALID_PARAM); + } + if (!ValidateUtil.validateString(stream.getAttributionId()) || !ValidateUtil.validateString(stream.getDocId()) + || !ValidateUtil.validateString(stream.getFileId()) || !ValidateUtil.validateString(stream.getAttributionType())) { + ExceptionCast.cast(CommonCode.INVALID_PARAM); + } + if (!ValidateUtil.validateString(stream.getDeviceId())) { + ExceptionCast.cast(ActivitiCode.ACT_ASSIGN_DEVICE_NONE); + } + LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + String userId = user.getId(); + if (!ValidateUtil.validateString(userId)) { + ExceptionCast.cast(UcenterCode.UCENTER_ACCOUNT_NOT_EXIST); + } + } + + //鑾峰彇鏂囦欢淇℃伅 + private DocInfo getDocInfo(AssignFileStream stream) { + DocInfo docInfo = docInfoService.getByDocAttrAndDocId(stream.getDocId(), Integer.parseInt(stream.getAttributionType()), stream.getAttributionId()); + if (docInfo == null || docInfo.getDocStatus() == 3) { + ExceptionCast.cast(ActivitiCode.ACT_DOC_ERROR); + } + return docInfo; + } + + //鑾峰彇鏂囦欢 + private void handleExistingDeviceDoc(DocFile docFile, MdcEquipment mdcEquipment, String deviceId) { + List<String> strings = iMdcProductionService.findListParentTreeAll(mdcEquipment.getId()); + if (strings != null && !strings.isEmpty()) { + String path = StringUtils.join(strings.toArray(), "/"); + boolean copyFileNc = FileUtilS.copyFileNcToBak(path + "/" + mdcEquipment.getEquipmentId(), + docFile.getFileName(), docFile.getFileSuffix()); + if (!copyFileNc) { + ExceptionCast.cast(ActivitiCode.ACT_FILE_ERROR); + } else { + DocInfo deviceDoc = docInfoService.getByDocAttrAndDocId(deviceId, 7, deviceId); + boolean doc = docRelativeService.deleteDocByAttr(deviceDoc.getDocId(), 7, deviceId); + if (!doc) { + ExceptionCast.cast(ActivitiCode.ACT_DOC_ERROR_DELEVE); + } + } + } + } + + private PermissionStreamNew getPermissionStreams(AssignFileStream stream) { + PermissionStreamNew permissionStreamNew = permissionService.getPermissionStreams(stream); + if (permissionStreamNew == null) { + ExceptionCast.cast(ActivitiCode.ACT_NODE_DEPART_NONE); + } + return permissionStreamNew ; + } + + //灏佽鏁版嵁 + private void saveBusinessObject(AssignFileStream stream, String userId) { + String streamId = IdWorker.getIdStr(); + stream.setStreamId(streamId); + stream.setApplyUserId(userId); + stream.setApplyTime(DateUtil.getNow()); + stream.setStatus(1); + boolean b = super.save(stream); + if (!b) { + ExceptionCast.cast(ActivitiCode.ACT_BUSINESS_SAVE_ERROR); + } + } + + //鎷惧彇浠诲姟 + private void completeTask(ProcessInstance processInstance, String userId) { + Task task = taskService.createTaskQuery().processDefinitionKey(PROCESS_KEY).taskAssignee(userId) + .processInstanceId(processInstance.getId()).singleResult(); + if (task == null) { + ExceptionCast.cast(ActivitiCode.ACT_APPROVE_USERS_NONE); + } + taskService.complete(task.getId()); + } + + //鑾峰彇璁惧 + private MdcEquipment getMdcEquipment(AssignFileStream stream) { + MdcEquipment mdcEquipment = iMdcEquipmentService.getById(stream.getDeviceId()); + if (mdcEquipment == null) { + ExceptionCast.cast(ActivitiCode.ACT_ASSIGN_DEVICE_NONE); + } + return mdcEquipment; + } + + //鑾峰彇鏂囦欢 + private DocFile getDocFile(AssignFileStream stream) { + DocFile docFile = docFileService.getById(stream.getFileId()); + if (docFile == null) { + ExceptionCast.cast(ActivitiCode.ACT_FILE_ERROR); + } + return docFile; + } + + //鎻掑叆鏂囦欢浼犺緭浠诲姟琛� + @Override + public void handleFileTransfer(MdcEquipment mdcEquipment, DocFile docFile) { + List<String> strings = iMdcProductionService.findListParentTreeAll(mdcEquipment.getId()); + if (strings != null && !strings.isEmpty()) { + String path = StringUtils.join(strings.toArray(), "/"); + boolean copyFileNc = FileUtilS.copyFileNc(docFile.getFilePath(), path + "/" + mdcEquipment.getEquipmentId(), + docFile.getFileEncodeName(), + docFile.getFileName(), docFile.getFileSuffix()); + if (!copyFileNc) { + ExceptionCast.cast(ActivitiCode.ACT_FILE_ERROR); + } else { + FileUtilS.deleteZipFromToSend(path + "/" + mdcEquipment.getEquipmentId(), + docFile.getFileName(), docFile.getFileSuffix()); + } + } else { + throw new RuntimeException("鏂囦欢浼犺緭璺緞鑾峰彇澶辫触"); + } + } + + //灏佽澶勭悊鏂囦欢 + private void handleFileProcessing(DocFile docFile, MdcEquipment mdcEquipment, String secretFolder) { + if (!docFile.getFileSuffix().equals("zip") && !docFile.getFileSuffix().equals("rar")) { + List<String> strings = iMdcProductionService.findListParentTreeAll(mdcEquipment.getId()); + if (strings != null && !strings.isEmpty()) { + DncPassLog passInfoTxt = new DncPassLog(); + + String path = 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)); + int fileNc =0; + if (dncPassLog !=null) { + fileNc = dncPassLog.getSequenceNumber() + 1; + } else { + fileNc = 1; + } + //澶勭悊鏂囦欢鍚嶇О 鏂囦欢璺緞 + String sequenceNc = String.format("%06d",fileNc); + DncPassLog passInfoNc = new DncPassLog(); + passInfoNc.setSequenceNumber(fileNc); + passInfoNc.setSequenceOrder(sequenceNc); + passInfoNc.setDayTime(DateUtil.format(dateFirst,DateUtil.STR_YEARMONTHDAY)); + passInfoNc.setPassType("02"); + passInfoNc.setPassName(docFile.getFileName()); + 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); + FileUtilS.copyFileUpName(path + "/" + mdcEquipment.getEquipmentId() + "/send/" + + docFile.getFileName(), + secretFolder +"/"+"10A"+DateUtil.format(dateFirst,DateUtil.STR_YEARMONTHDAY)+sequenceNc+"_"+mdcEquipment.getEquipmentId(), + docFile.getFileSuffix(), "NC"); + } + } + } + + /** + * 澶勭悊瀵瑰簲浜у搧缁撴瀯鏍戙�乶c鏂囦欢銆佸垁鍏峰垪琛ㄣ�佺▼搴忓姞宸ョ‘璁よ〃灏佽 + * @param docInfo + */ + private void handleProductTree(DocInfo docInfo,DocRelative docRelative,String equipmentId) { + /*鏌ヨ鏈�鍚庝竴鏉¤褰�*/ + //浼戠湢 500姣 + DncPassLog passInfoTxt = new DncPassLog(); + Date dateFirst = DateUtil.getNow(); + passInfoTxt.setDayTime(DateUtil.format(dateFirst,DateUtil.STR_YEARMONTHDAY)); + DncPassLog dncPassLog = dncPassLogService.findDayTime(DateUtil.format(dateFirst,DateUtil.STR_YEARMONTHDAY)); + int fileTxt = 0, fileNc =0; + if (dncPassLog !=null) { + fileTxt = dncPassLog.getSequenceNumber() + 1; + } else { + fileTxt = 1; + } + String sequence = String.format("%06d",fileTxt); + passInfoTxt.setSequenceNumber(fileTxt); + passInfoTxt.setCreateTime(dateFirst); + passInfoTxt.setSequenceOrder(sequence); + System.out.println(DateUtil.format(dateFirst,DateUtil.STR_DATE_TIME)); + passInfoTxt.setPassType(DncPassLogPassType.PRODUCTSTRUCTURE.getCode()); + dncPassLogService.save(passInfoTxt); + String fileName="10A"+DateUtil.format(dateFirst,DateUtil.STR_YEARMONTHDAY); + if (Objects.equals(docInfo.getAttributionType(), DocAttributionTypeEnum.PROCESS.getCode())){ + //宸ュ簭瀵瑰簲璁惧绫� + String filePath = ferryService.exportData(TransferPackage.DataType.PROCESS, docRelative.getId(),fileName+sequence+"_"+equipmentId+".ferry"); + System.out.println("宸ュ簭鏁版嵁宸插鍑�: " + filePath); + }else { + //宸ユ瀵瑰簲璁惧绫� + String filePath = ferryService.exportData(TransferPackage.DataType.WORKSTEP, docRelative.getId(),fileName+sequence+"_"+equipmentId+".ferry"); + System.out.println("宸ユ鏁版嵁宸插鍑�: " + filePath); + } + } + @Override + public void afterFlowHandle(FlowMyBusiness business) { + business.getTaskNameId();//鎺ヤ笅鏉ュ鎵圭殑鑺傜偣 + business.getValues();//鍓嶇浼犺繘鏉ョ殑鍙傛暟 + business.getActStatus(); + } + + @Override + public Object getBusinessDataById(String dataId) { + return this.getById(dataId); + } + + @Override + public Map<String, Object> flowValuesOfTask(String taskNameId, Map<String, Object> values) { + return null; + } + + @Override + public List<String> flowCandidateUsernamesOfTask(String taskNameId, Map<String, Object> values) { + return null; + } +} -- Gitblit v1.9.3