package org.jeecg.modules.dncFlow.service.impl; import cn.hutool.core.util.StrUtil; 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 com.google.common.collect.Lists; 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.entity.*; import org.jeecg.modules.dnc.exception.ExceptionCast; import org.jeecg.modules.dnc.ext.NcTxtFilePathInfo; import org.jeecg.modules.dnc.response.*; import org.jeecg.modules.dnc.service.*; 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.entity.ToEquipmentTask; 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.service.IToEquipmentTaskService; import org.jeecg.modules.dncFlow.vo.AssignFlowTaskVo; import org.jeecg.modules.flowable.apithird.business.entity.FlowMyBusiness; 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.entity.MdcProduction; 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.io.IOException; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.stream.Collectors; @Service("IAssignFileStreamService") public class AssignFileStreamServiceImpl extends ServiceImpl implements IAssignFileStreamService , FlowCallBackServiceI { private static final String PROCESS_KEY = "assign_nc_to_device"; private static final String APPLY_VARIABLE = "apply_user"; private static final String APPROVE_VARIABLE = "approve_users"; private static final String SEND_CODE = "SEND"; @Value("${flowable.enable}") private Boolean flowableEnable; @Autowired private IDocInfoService docInfoService; @Autowired private IProcessStreamService processStreamService; @Autowired private IWorkStepService workStepService; @Autowired private IPermissionStreamNewService permissionStreamNewService; @Autowired private IDocClassificationService classificationService; @Autowired private IToEquipmentTaskService equipmentTaskService; @Autowired private IDeviceInfoService deviceInfoService; @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 IDeviceTypeService deviceTypeService; @Value("${securedoc.whether}") private String whether; @Value("${securedoc.localFilePath}") private String localFilePath; @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("文件名称存在设备特殊字符"); } if(flowableEnable) { return applyAssignFileActive(stream); }else { return applyAssignFileNonActive(stream); } } } /** * 判断设备特殊字符 * @param deviceId,fileId * 设备ID,文件ID */ public String getDeviceSpecialChar(String deviceId, String fileId){ //替换为mdc设备表 // DeviceInfo deviceInfo = deviceInfoService.getById(deviceId); 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().eq("publish_file_id",fileId)); if(docInfo == null) ExceptionCast.cast(ActivitiCode.ACT_FILE_ERROR); List deviceCharactersList=iDeviceCharactersService.list( new LambdaQueryWrapper().eq(DeviceCharacters::getDeviceNo,mdcEquipment.getEquipmentId())); if (deviceCharactersList.isEmpty()){ return ""; }else { List 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 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); MdcEquipment mdcEquipment = getMdcEquipment(stream); DocFile docFile = getDocFile(stream); DocInfo deviceDoc = docInfoService.getByDocAttrAndDocId(stream.getDocId(), 7, stream.getDeviceId()); if(deviceDoc != null) { // 删除 备份 覆盖 原有的 List 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); } } handleFileTransfer(mdcEquipment, docFile); handleFileProcessing(docFile, mdcEquipment, whether, localFilePath); 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); Map 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; //同意操作 if (StrUtil.isNotEmpty(en.getStepId())){ //工步下设备类指派 docInfo = docInfoService.getByDocAttrAndDocId(en.getDocId(), 6, en.getDeviceTypeId()); }else { docInfo = docInfoService.getByDocAttrAndDocId(en.getDocId(), 5, en.getDeviceTypeId()); } if(docInfo == null || docInfo.getDocStatus() == 3) 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 deviceDoc = docInfoService.getByDocAttrAndDocId(en.getDocId(),7, en.getDeviceId()); if(deviceDoc != null) { // 删除 备份 覆盖 原有的 List 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 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()); } } } 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 list = approveBatchRequest.getTaskArr(); if(list == null || list.isEmpty()) ExceptionCast.cast(CommonCode.INVALID_PARAM); // list.forEach(item -> { // AssignFileStream stream = new AssignFileStream(); // stream.setApproveContent(approveBatchRequest.getApproveContent()); // stream.setStatus(approveBatchRequest.getStatus()); // boolean b = approveAssignFile(item.getId(), item.getBusinessKey(), stream); // if(!b) // ExceptionCast.cast(ActivitiCode.ACT_APPROVE_ERROR); // }); 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 lambdaQueryWrapper = Wrappers.lambdaQuery(); lambdaQueryWrapper.eq(AssignFileStreamExt::getApproveUserId, userId); lambdaQueryWrapper.orderByDesc(AssignFileStreamExt::getApproveTime); IPage pageData = new Page<>(page, size); if(request != null) { if(ValidateUtil.validateString(request.getAscStr())) { String[] ascArr = request.getAscStr().split(","); // ((Page) pageData).setAsc(ascArr); } if(ValidateUtil.validateString(request.getDescStr())) { String[] descStr = request.getDescStr().split(","); // ((Page) pageData).setDesc(descStr); } } IPage streamExtIPage = super.getBaseMapper().findByPage(pageData, lambdaQueryWrapper); return Result.ok(streamExtIPage); } @Override public QueryPageResponseResult 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 queryWrapper = Wrappers.query(); queryWrapper.eq("a.doc_id", docId); queryWrapper.orderByDesc("approve_time"); IPage pageData = new Page<>(page, size); IPage streamExtIPage = super.getBaseMapper().findByPage(pageData, queryWrapper); return new QueryPageResponseResult<>(CommonCode.SUCCESS, streamExtIPage); } @Override public Boolean getFlowableEnable(){ if(flowableEnable != null) { return flowableEnable; } return false; } @Override @Transactional(rollbackFor = {Exception.class}) public boolean transferDocFile(String pnCode, String deviceNo) { List streams = processStreamService.validateDeviceProcessInfo(pnCode, deviceNo); DeviceInfo deviceInfo = deviceInfoService.getByDeviceNo(deviceNo); if(deviceInfo == null) ExceptionCast.cast(DeviceCode.DEVICE_NOT_EXIST); //删除原来设备下的所有文档 docRelativeService.deleteByDocAttr(7, deviceInfo.getDeviceId()); List docInfoList = docInfoService.getByProcessIds(streams); if(docInfoList == null || docInfoList.isEmpty()) ExceptionCast.cast(DocumentCode.DOC_NOT_EXIST); LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal(); String userId = user.getId(); if(!ValidateUtil.validateString(userId)) ExceptionCast.cast(UcenterCode.UCENTER_ACCOUNT_NOT_EXIST); for(DocInfo docInfo : docInfoList) { DocFile docFile = docFileService.getById(docInfo.getPublishFileId()); if(docFile == null) ExceptionCast.cast(ActivitiCode.ACT_FILE_ERROR); //插入文档到设备发送文档 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(deviceInfo.getDeviceId()); boolean b = docRelativeService.save(docRelative); if(!b) ExceptionCast.cast(ActivitiCode.ACT_APPROVE_ERROR); //插入文件传输任务表 ToEquipmentTask equipmentTask = new ToEquipmentTask(); //不能直接从doc中拿fileId 和version 可能会存在斌更 //equipmentTask.setFileId(docInfo.getPublishFileId()); //equipmentTask.setDocVersion(docInfo.getPublishVersion()); equipmentTask.setDocId(docInfo.getDocId()); equipmentTask.setSyncFlag(1); equipmentTask.setDeviceNo(deviceInfo.getDeviceNo()); equipmentTask.setDeviceId(deviceInfo.getDeviceId()); equipmentTask.setDepartId(deviceInfo.getDepartId()); //文件相关信息 equipmentTask.setFileId(docFile.getFileId()); equipmentTask.setDocVersion(docFile.getDocVersion()); equipmentTask.setFileName(docInfo.getDocName()); equipmentTask.setFileEncodeName(docFile.getFileEncodeName()); equipmentTask.setFilePath(docFile.getFilePath()); equipmentTask.setFileSuffix(docFile.getFileSuffix()); equipmentTask.setFileSize(docFile.getFileSize()); b = equipmentTaskService.save(equipmentTask); if(!b) { ExceptionCast.cast(ActivitiCode.ACT_APPROVE_ERROR); } } return synchronizedFlagService.updateFlag(1); } //传参验证 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 strings = iMdcProductionService.findListParentTreeAll(mdcEquipment.getEquipmentId()); 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) { LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal(); DeviceType deviceType = deviceTypeService.getById(stream.getAttributionId()); String attributionId = deviceType != null ? deviceType.getAttributionId() : stream.getAttributionId(); PermissionStreamNew permissionStreams; if (stream.getAttributionType().equals("5")) { // 工序 permissionStreams = handleProcess(stream, attributionId, user); } else { // 工步 permissionStreams = handleWorkStep(stream, attributionId, user); } if (permissionStreams == null) { ExceptionCast.cast(ActivitiCode.ACT_NODE_DEPART_NONE); } return permissionStreams; } private PermissionStreamNew handleProcess(AssignFileStream stream, String attributionId, LoginUser user) { ProcessStream processStream = processStreamService.getById(attributionId); if (processStream == null) { ExceptionCast.cast(CommonCode.INVALID_PARAM); } stream.setProductId(processStream.getProductId()); stream.setComponentId(processStream.getComponentId()); stream.setPartsId(processStream.getPartsId()); stream.setProcessId(processStream.getProcessId()); if (deviceTypeService.getById(stream.getAttributionId()) != null) { stream.setDeviceTypeId(deviceTypeService.getById(stream.getAttributionId()).getId()); } return permissionStreamNewService.loadPermissionStreamNewByBusinessIdAndUserId(processStream.getProcessId(), user.getId(), "5"); } private PermissionStreamNew handleWorkStep(AssignFileStream stream, String attributionId, LoginUser user) { WorkStep workStep = workStepService.getById(attributionId); if (workStep == null) { ExceptionCast.cast(CommonCode.INVALID_PARAM); } stream.setProductId(workStep.getProductId()); stream.setComponentId(workStep.getComponentId()); stream.setPartsId(workStep.getPartsId()); stream.setProcessId(workStep.getProcessId()); stream.setStepId(workStep.getId()); if (deviceTypeService.getById(stream.getAttributionId()) != null) { stream.setDeviceTypeId(deviceTypeService.getById(stream.getAttributionId()).getId()); } return permissionStreamNewService.loadPermissionStreamNewByBusinessIdAndUserId(workStep.getId(), user.getId(), "6"); } //获取部门信息 //todo 修改 private List getDepartIds(List permissionStreams, String userId) { Map map = iMdcProductionService.getUserAssignedDepart(userId); List departIds = permissionStreams.stream() .filter(item -> map.containsKey(item.getDepartId())) .map(PermissionStream::getDepartId) .collect(Collectors.toList()); if (departIds.isEmpty()) { ExceptionCast.cast(ActivitiCode.ACT_USER_NOT_PERM); } return departIds; } //封装数据 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 ProcessInstance startProcessInstance(AssignFileStream stream, List userIdList) { // String approveUsers = String.join(",", userIdList); // Map avariableMap = new HashMap<>(); // avariableMap.put(APPLY_VARIABLE, stream.getApplyUserId()); // avariableMap.put(APPROVE_VARIABLE, approveUsers); // ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(PROCESS_KEY, stream.getStreamId(), avariableMap); // if (processInstance == null) { // ExceptionCast.cast(ActivitiCode.ACT_APPROVE_USERS_NONE); // } // return processInstance; // } //拾取任务 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; } //插入文件传输任务表 private void handleFileTransfer(MdcEquipment mdcEquipment, DocFile docFile) { List 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 whether, String localFilePath) { if (whether.equals("true") && !docFile.getFileSuffix().equals("zip") && !docFile.getFileSuffix().equals("rar")) { String size = FileUtilS.fileSizeNC(docFile.getFilePath(), docFile.getFileEncodeName()); List strings = iMdcProductionService.findListParentTreeAll(mdcEquipment.getId()); if (strings != null && !strings.isEmpty()) { String path = StringUtils.join(strings.toArray(), "/"); Date dateFirst = DateUtil.getNow(); NcTxtFilePathInfo ncTxt = new NcTxtFilePathInfo(); ncTxt.setEquipmentId(mdcEquipment.getEquipmentId()); ncTxt.setFileNcName("02A" + DateUtil.format(dateFirst, DateUtil.STR_YEARMONTHDAY)); ncTxt.setFileTxtName("02A" + DateUtil.format(dateFirst, DateUtil.STR_YEARMONTHDAY)); ncTxt.setFilePath(path + "/" + mdcEquipment.getEquipmentId() + "/"); ncTxt.setOrigFileName(docFile.getFileName()); ncTxt.setOrigFileSuffix(docFile.getFileSuffix()); ncTxt.setFileAddOrDelete(1); String loFilePath = localFilePath + ncTxt.getFileTxtName() + ".nc"; try { String allList = ncTxt.getFileTxtName() + "\n" + ncTxt.getFileNcName() + "\n" + ncTxt.getOrigFileName() + "\n" + ncTxt.getOrigFileSuffix() + "\n" + ncTxt.getFilePath() + "\n" + ncTxt.getEquipmentId() + "\n" + ncTxt.getFileAddOrDelete().toString() + "\n" + size + "\n"; FileUtilS.fileWriterSql(loFilePath, allList); boolean copyFileNc = FileUtilS.copyFileUpName(path + "/" + mdcEquipment.getEquipmentId() + "/send/" + docFile.getFileName(), localFilePath + ncTxt.getFileNcName(), docFile.getFileSuffix(), "NC"); if (!copyFileNc) { FileUtilS.deleteNcFile(loFilePath); } } catch (IOException e) { throw new RuntimeException("文件处理失败", e); } } } } @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 flowValuesOfTask(String taskNameId, Map values) { return null; } @Override public List flowCandidateUsernamesOfTask(String taskNameId, Map values) { return Lists.newArrayList("jeecg"); } }