package org.jeecg.modules.activiti.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 org.activiti.engine.HistoryService; import org.activiti.engine.RuntimeService; import org.activiti.engine.TaskService; import org.activiti.engine.history.HistoricProcessInstance; import org.activiti.engine.runtime.ProcessInstance; import org.activiti.engine.task.Task; import org.apache.commons.lang3.StringUtils; import org.apache.shiro.SecurityUtils; import org.jeecg.common.api.vo.Result; import org.jeecg.common.system.vo.LoginUser; import org.jeecg.modules.activiti.entity.AssignFileStream; import org.jeecg.modules.activiti.entity.ToEquipmentTask; import org.jeecg.modules.activiti.ext.ActTaskExt; import org.jeecg.modules.activiti.ext.AssignFileStreamExt; import org.jeecg.modules.activiti.mapper.AssignFileStreamMapper; import org.jeecg.modules.activiti.request.ApproveBatchRequest; import org.jeecg.modules.activiti.request.AssignFileRequest; import org.jeecg.modules.activiti.request.AssignFileStreamQueryRequest; import org.jeecg.modules.activiti.request.TaskRequest; import org.jeecg.modules.activiti.service.IActivitiDefinitionService; import org.jeecg.modules.activiti.service.IAssignFileStreamService; import org.jeecg.modules.activiti.service.IToEquipmentTaskService; 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.ucenter.Department; 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.mdc.entity.MdcEquipment; import org.jeecg.modules.mdc.service.IMdcEquipmentService; import org.jeecg.modules.system.service.IMdcProductionService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.io.IOException; import java.util.*; import java.util.stream.Collectors; @Service public class AssignFileStreamServiceImpl extends ServiceImpl implements IAssignFileStreamService { 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("${activiti.enable}") private Boolean activeEnable; @Autowired private RuntimeService runtimeService; @Autowired private TaskService taskService; @Autowired private IDocInfoService docInfoService; @Autowired private IProcessStreamService processStreamService; @Autowired private IWorkStepService workStepService; @Autowired private IPermissionStreamService permissionStreamService; @Autowired private IDepartmentService departmentService; @Autowired private HistoryService historyService; @Autowired private IDocClassificationService classificationService; @Autowired private IToEquipmentTaskService equipmentTaskService; @Autowired private IDeviceInfoService deviceInfoService; @Autowired private IDocFileService docFileService; @Autowired private IActivitiDefinitionService definitionService; @Autowired private IDocRelativeService docRelativeService; @Autowired private ISynchronizedFlagService synchronizedFlagService; @Autowired private IDeviceGroupService deviceGroupService; @Autowired private IDncPassLogService dncPassLogService; @Autowired private IDeviceCharactersService iDeviceCharactersService; @Autowired private IMdcEquipmentService iMdcEquipmentService; @Autowired private IMdcProductionService iMdcProductionService; @Autowired private StringRedisTemplate redisTemplate; @Value("${securedoc.serverIp}") private String serverIp; @Value("${securedoc.serverPort}") private int serverPort; @Value("${securedoc.whether}") private String whether; @Value("${securedoc.localFilePath}") private String localFilePath; @Override @Transactional(rollbackFor = {Exception.class}) public ResponseResult applyAssignFile(AssignFileStream stream) { synchronized (this){ //判断设备特殊字符 String specialChar = getDeviceSpecialChar(stream.getDeviceId(),stream.getFileId()); if (StrUtil.isNotEmpty(specialChar)){ //抛出特殊字符异常 return createSpecialCharErrorResponse(specialChar); } if(activeEnable) { boolean b = applyAssignFileActive(stream); if (b) { return ResponseResult.SUCCESS(); } else { return ResponseResult.SUCCESS(); } }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 boolean applyAssignFileActive(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(ActivitiCode.ACT_BUSINESS_SAVE_ERROR); 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); //修改为前端传入 DocInfo docInfo = docInfoService.getByDocAttrAndDocId(stream.getDocId(), Integer.parseInt(stream.getAttributionType()), stream.getAttributionId()); if(docInfo == null || docInfo.getDocStatus() == 3) ExceptionCast.cast(ActivitiCode.ACT_DOC_ERROR); DeviceInfo deviceInfo = deviceInfoService.getById(stream.getDeviceId()); if(deviceInfo == null) ExceptionCast.cast(ActivitiCode.ACT_ASSIGN_DEVICE_NONE); if(deviceInfo == null) ExceptionCast.cast(ActivitiCode.ACT_ASSIGN_DEVICE_NONE); DocFile docFile = docFileService.getById(stream.getFileId()); DocInfo deviceDoc = docInfoService.getByDocAttrAndDocId(stream.getDocId(), 4, stream.getDeviceId()); if(deviceDoc != null) { /*// 删除 备份 覆盖 原有的 List strings = deviceGroupService.findListParentTreeAll(deviceInfo.getGroupId()); if (strings != null && !strings.isEmpty()) { String path = StringUtils.join(strings.toArray(), "/"); boolean copyFileNc = FileUtilS.copyFileNcToBak(path + "/"+ deviceInfo.getDeviceNo(), docFile.getFileName(), docFile.getFileSuffix()); if (!copyFileNc) { ExceptionCast.cast(ActivitiCode.ACT_FILE_ERROR); } else { //docInfoService.getBaseMapper().deleteById(deviceDoc.getDocId()); boolean doc = docRelativeService.deleteDocByAttr(deviceDoc.getDocId(),4,stream.getDeviceId()); if (!doc) { ExceptionCast.cast(ActivitiCode.ACT_DOC_ERROR_DELEVE); } } }*/ } deviceDoc = docInfoService.findByAttrAndDocName(docInfo.getDocName(), 4, stream.getDeviceId()); if(deviceDoc != null) { // 删除 备份 覆盖 原有的 /* List strings = deviceGroupService.findListParentTreeAll(deviceInfo.getGroupId()); if (strings != null && !strings.isEmpty()) { String path = StringUtils.join(strings.toArray(), "/"); boolean copyFileNc = FileUtilS.copyFileNcToBak(path + "/"+ deviceInfo.getDeviceNo(), docFile.getFileName(), docFile.getFileSuffix()); if (!copyFileNc) { ExceptionCast.cast(ActivitiCode.ACT_FILE_ERROR); } else { //docInfoService.getBaseMapper().deleteById(deviceDoc.getDocId()); boolean doc = docRelativeService.deleteDocByAttr(deviceDoc.getDocId(),4,stream.getDeviceId()); if (!doc) { ExceptionCast.cast(ActivitiCode.ACT_DOC_ERROR_DELEVE); } } }*/ } ProcessStream processStream = processStreamService.getById(stream.getProcessId()); if(processStream == null) ExceptionCast.cast(ActivitiCode.ACT_BUSINESS_SAVE_ERROR); stream.setProductId(processStream.getProductId()); stream.setComponentId(processStream.getComponentId()); stream.setPartsId(processStream.getPartsId()); List permissionStreams = null; if(ValidateUtil.validateString(processStream.getPartsId())) { //进入零件 permissionStreams = permissionStreamService.getByPartsId(stream.getProductId(), stream.getComponentId(), stream.getPartsId()); }else if(ValidateUtil.validateString(processStream.getComponentId())) { //进入部件的处理 permissionStreams = permissionStreamService.getByComponentId(stream.getProductId(), stream.getComponentId()); } if(permissionStreams == null || permissionStreams.isEmpty()) ExceptionCast.cast(ActivitiCode.ACT_NODE_DEPART_NONE); List departIds = new ArrayList<>(); Map map = departmentService.getMapByUserId(userId); permissionStreams.forEach(item -> { if(map.containsKey(item.getDepartId())) { departIds.add(item.getDepartId()); } }); if(departIds.isEmpty()) ExceptionCast.cast(ActivitiCode.ACT_USER_NOT_PERM); //获取部门审批人 List userIdList = definitionService.getByDepartIds(departIds); if(userIdList == null || userIdList.isEmpty()) ExceptionCast.cast(ActivitiCode.ACT_APPROVE_USERS_NONE); //校验结束 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); //保存流程任务 String approveUsers = String.join(",", userIdList); Map avariableMap = new HashMap<>(); avariableMap.put(APPLY_VARIABLE, userId); avariableMap.put(APPROVE_VARIABLE, approveUsers); //启动流程 ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(PROCESS_KEY, streamId, avariableMap); if(processInstance == null) ExceptionCast.cast(ActivitiCode.ACT_APPROVE_USERS_NONE); //查询当前流程用户流程任务 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()); return true; } @Override @Transactional(rollbackFor = {Exception.class}) public ResponseResult applyAssignFileNonActive(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); DocInfo docInfo = docInfoService.getByDocAttrAndDocId(stream.getDocId(), Integer.parseInt(stream.getAttributionType()), stream.getAttributionId()); if(docInfo == null || docInfo.getDocStatus() == 3) ExceptionCast.cast(ActivitiCode.ACT_DOC_ERROR); MdcEquipment mdcEquipment = iMdcEquipmentService.getById(stream.getDeviceId()); // DeviceInfo deviceInfo = deviceInfoService.getById(stream.getDeviceId()); if(mdcEquipment == null) ExceptionCast.cast(ActivitiCode.ACT_ASSIGN_DEVICE_NONE); DocFile docFile = docFileService.getById(stream.getFileId()); if(docFile == null) ExceptionCast.cast(ActivitiCode.ACT_FILE_ERROR); DocInfo deviceDoc = docInfoService.getByDocAttrAndDocId(stream.getDocId(), 4, 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()); } } /*deviceDoc = docInfoService.findByAttrAndDocName(docInfo.getDocName(), 4, stream.getDeviceId()); if(deviceDoc != null) { // 删除 备份 覆盖 原有的 List strings = deviceGroupService.findListParentTreeAll(deviceInfo.getGroupId()); if (strings != null && !strings.isEmpty()) { String path = StringUtils.join(strings.toArray(), "/"); boolean copyFileNc = FileUtilS.copyFileNcToBak(path + "/"+ deviceInfo.getDeviceNo(), docFile.getFileName(), docFile.getFileSuffix()); } }*/ List departIds = new ArrayList<>(); if (stream.getAttributionType().equals("5")){ //工序 ProcessStream processStream = processStreamService.getById(stream.getAttributionId()); if(processStream == null) ExceptionCast.cast(CommonCode.INVALID_PARAM); stream.setProductId(processStream.getProductId()); stream.setComponentId(processStream.getComponentId()); stream.setPartsId(processStream.getPartsId()); stream.setProcessId(stream.getAttributionId()); List permissionStreams = null; if(ValidateUtil.validateString(processStream.getPartsId())) { //进入零件 permissionStreams = permissionStreamService.getByPartsId(stream.getProductId(), stream.getComponentId(), stream.getPartsId()); }else if(ValidateUtil.validateString(processStream.getComponentId())) { //进入部件的处理 permissionStreams = permissionStreamService.getByComponentId(stream.getProductId(), stream.getComponentId()); } if(permissionStreams == null || permissionStreams.isEmpty()) ExceptionCast.cast(ActivitiCode.ACT_NODE_DEPART_NONE); Map map = departmentService.getMapByUserId(userId); permissionStreams.forEach(item -> { if(map.containsKey(item.getDepartId())) { departIds.add(item.getDepartId()); } }); }else{ //工步 WorkStep workStep=workStepService.getById(stream.getAttributionId()); 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.setProcessId(stream.getAttributionId()); List permissionStreams = null; if(ValidateUtil.validateString(workStep.getProcessId())) { //进入工序 permissionStreams=permissionStreamService.getByProcessId(stream.getProductId(), stream.getComponentId(), stream.getPartsId(),stream.getProcessId()); }else if(ValidateUtil.validateString(workStep.getPartsId())) { //进入零件 permissionStreams = permissionStreamService.getByPartsId(stream.getProductId(), stream.getComponentId(), stream.getPartsId()); }else if(ValidateUtil.validateString(workStep.getComponentId())) { //进入部件的处理 permissionStreams = permissionStreamService.getByComponentId(stream.getProductId(), stream.getComponentId()); } if(permissionStreams == null || permissionStreams.isEmpty()) ExceptionCast.cast(ActivitiCode.ACT_NODE_DEPART_NONE); Map map = departmentService.getMapByUserId(userId); permissionStreams.forEach(item -> { if(map.containsKey(item.getDepartId())) { departIds.add(item.getDepartId()); } }); } if(departIds.isEmpty()) ExceptionCast.cast(ActivitiCode.ACT_USER_NOT_PERM); //deviceDoc = docInfoService.findByAttrAndDocName(docInfo.getDocName(), 4, stream.getDeviceId()); /*if(deviceDoc != null) ExceptionCast.cast(ActivitiCode.ACT_DEVICE_DOC_ERROR);*/ //插入文档到设备发送文档 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(4); docRelative.setAttributionId(stream.getDeviceId()); boolean b = docRelativeService.save(docRelative); if(!b) { ExceptionCast.cast(ActivitiCode.ACT_APPROVE_ERROR); } } //TODO //插入文件传输任务表 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 { return new ResponseResult(CommonCode.FAIL); } String size = FileUtilS.fileSizeNC(docFile.getFilePath(),docFile.getFileEncodeName()); if (whether.equals("true") && !docFile.getFileSuffix().equals("zip") && !docFile.getFileSuffix().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 = 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("02"); 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(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); NcTxtFilePathInfo ncTxt = new NcTxtFilePathInfo(); ncTxt.setEquipmentId(mdcEquipment.getEquipmentId()); ncTxt.setFileNcName("02A"+DateUtil.format(dateFirst,DateUtil.STR_YEARMONTHDAY)+sequenceNc); ncTxt.setFileTxtName("02A"+DateUtil.format(dateFirst,DateUtil.STR_YEARMONTHDAY)+sequence); ncTxt.setFilePath(path + "/"+ mdcEquipment.getEquipmentId() + "/" ); ncTxt.setOrigFileName(docFile.getFileName()); ncTxt.setOrigFileSuffix(docFile.getFileSuffix()); ncTxt.setFileAddOrDelete(1); String loFilePath = localFilePath + ncTxt.getFileTxtName() + ".nc"; // String loFilePath = localFilePath + "\\" + ncTxt.getFileTxtName() + ".nc"; 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"); FileUtilS.fileWriterSql(loFilePath,allList); //文件解析重新规划 //添加文件名字,第一行, /* boolean copyFileNc = FileUtilS.copyFileNcIntegration(path + "/"+ deviceInfo.getDeviceNo() +"/send/" + docFile.getFileName(), localFilePath + "\\" + ncTxt.getFileNcName(), docFile.getFileSuffix()); */ boolean copyFileNc = FileUtilS.copyFileUpName(path + "/"+ mdcEquipment.getEquipmentId() +"/send/" + docFile.getFileName(), localFilePath + ncTxt.getFileNcName(), // localFilePath + "\\" + ncTxt.getFileNcName(), docFile.getFileSuffix(),"NC"); if (!copyFileNc) { FileUtilS.deleteNcFile(loFilePath); } } catch (IOException e) { e.printStackTrace(); } } synchronizedFlagService.updateFlag(2); return new ResponseResult(CommonCode.SUCCESS); } @Override public IPage getUndoTaskList(Integer pageNo,Integer pageSize) { LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal(); String userId = user.getId(); if(!ValidateUtil.validateString(userId)) return null; List list = taskService.createTaskQuery().taskCandidateOrAssigned(userId).list(); if(list == null || list.isEmpty()) return null; List extList = new ArrayList<>(); list.forEach(item -> { ActTaskExt ext = new ActTaskExt(); ext.instanceOfTask(item); HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery().processInstanceId( item.getProcessInstanceId()).singleResult(); if(historicProcessInstance == null || !ValidateUtil.validateString(historicProcessInstance.getBusinessKey())) { ExceptionCast.cast(ActivitiCode.ACT_PROC_INST_ERROR); } ext.setBusinessKey(historicProcessInstance.getBusinessKey()); AssignFileStreamExt streamDetail = getAssignFileStreamDetail(historicProcessInstance.getBusinessKey()); if(streamDetail == null) ExceptionCast.cast(ActivitiCode.ACT_BUSINESS_DETAIL_ERROR); ext.setAssignFileStream(streamDetail); extList.add(ext); }); //封装Page IPage page = new Page<>(pageNo,pageSize); page.setRecords(extList); return page; } @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(String taskId, String streamId, AssignFileStream stream) { if(!ValidateUtil.validateString(taskId) || !ValidateUtil.validateString(streamId) || stream == 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(stream.getStatus())) ExceptionCast.cast(ActivitiCode.ACT_STATUS_ERROR); AssignFileStream en = super.getById(streamId); if(en == null) ExceptionCast.cast(ActivitiCode.ACT_BUSINESS_DETAIL_ERROR); Task task = taskService.createTaskQuery().taskId(taskId).taskCandidateOrAssigned(userId).singleResult(); if(task == null) ExceptionCast.cast(ActivitiCode.ACT_TASK_ERROR); if(!ValidateUtil.validateString(task.getAssignee())) { //拾取任务 taskService.claim(task.getId(), userId); //完成任务 taskService.complete(task.getId()); }else { //完成任务 taskService.complete(task.getId()); } //更新对象封装 AssignFileStream up = new AssignFileStream(); up.setApproveContent(stream.getApproveContent()); up.setStatus(stream.getStatus()); up.setApproveUserId(userId); up.setApproveTime(DateUtil.getNow()); up.setStreamId(streamId); boolean b = super.updateById(up); if(!b) ExceptionCast.cast(ActivitiCode.ACT_APPROVE_ERROR); if(up.getStatus() == 2) { //同意操作 DocInfo docInfo = docInfoService.getByDocAttrAndDocId(en.getDocId(), 5, en.getProcessId()); if(docInfo == null || docInfo.getDocStatus() == 3) ExceptionCast.cast(ActivitiCode.ACT_DOC_ERROR); DeviceInfo deviceInfo = deviceInfoService.getById(en.getDeviceId()); if(deviceInfo == 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(),4, en.getDeviceId()); if(deviceDoc != null) { // 删除 备份 覆盖 原有的 List strings = deviceGroupService.findListParentTreeAll(deviceInfo.getGroupId()); if (strings != null && !strings.isEmpty()) { String path = StringUtils.join(strings.toArray(), "/"); boolean copyFileNc = FileUtilS.copyFileNcToBak(path + "/"+ deviceInfo.getDeviceNo(), docFile.getFileName(), docFile.getFileSuffix()); /* //docInfoService.getBaseMapper().deleteById(deviceDoc.getDocId()); boolean doc = docRelativeService.deleteCopyDocByAttrNext(deviceDoc.getDocId(),4,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(4); docRelative.setAttributionId(en.getDeviceId()); b = docRelativeService.save(docRelative); } if(!b) ExceptionCast.cast(ActivitiCode.ACT_APPROVE_ERROR); if (deviceInfo != null) { List strings = deviceGroupService.findListParentTreeAll(deviceInfo.getGroupId()); if (strings != null && !strings.isEmpty()) { String path = StringUtils.join(strings.toArray(), "/"); boolean copyFileNc = FileUtilS.copyFileNc(docFile.getFilePath(),path + "/"+ deviceInfo.getDeviceNo(), docFile.getFileEncodeName(), docFile.getFileName(),docFile.getFileSuffix()); if (!copyFileNc) { ExceptionCast.cast(ActivitiCode.ACT_FILE_ERROR); } else { FileUtilS.deleteZipFromToSend(path + "/"+ deviceInfo.getDeviceNo(), 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.setDocId(assignFileRequest.getDocId()); stream.setFileId(assignFileRequest.getFileId()); stream.setApplyReason(assignFileRequest.getApplyReason()); stream.setDeviceId(id); ResponseResult 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 getActiveEnable() { if(activeEnable != null) { return activeEnable; } 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(4, 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(4); 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); } }