| | |
| | | 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.ext.NcTxtFilePathInfo; |
| | | 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.flowable.service.IFlowTaskService; |
| | | import org.jeecg.modules.mdc.entity.MdcEquipment; |
| | | import org.jeecg.modules.mdc.service.IMdcEquipmentService; |
| | | import org.jeecg.modules.message.enums.DeployEnum; |
| | | import org.jeecg.modules.system.service.IMdcProductionService; |
| | | import org.springframework.beans.BeanUtils; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | |
| | | 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.*; |
| | | 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 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; |
| | | |
| | | @Value("${fileHomePath}") |
| | | private String fileHomePath; |
| | | @Autowired |
| | | private IDocInfoService docInfoService; |
| | | @Autowired |
| | |
| | | private PermissionService permissionService; |
| | | @Autowired |
| | | private IDncPassLogService dncPassLogService; |
| | | @Value("${deploy.deployType}") |
| | | private String deployType; //工控网/涉密网部署 0为工控网 1为涉密网 |
| | | @Value("${deploy.secretFolder}") |
| | | private String secretFolder; //涉密网传输nc文件夹 |
| | | |
| | | @Autowired |
| | | private FileFerryService ferryService; |
| | | @Override |
| | | @Transactional(rollbackFor = {Exception.class}) |
| | | public Result applyAssignFile(AssignFileStream stream) { |
| | |
| | | } |
| | | |
| | | } |
| | | handleFileTransfer(mdcEquipment, docFile); |
| | | //注意----区分工控网与涉密网!!! 涉密网进行NC文件的拷贝,工控网负责进行解析NC文件 |
| | | if (deployType.equals(DeployEnum.SMW.getCode())) { |
| | | handleFileProcessing(docFile, mdcEquipment, secretFolder); |
| | | 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("操作成功"); |
| | | } |
| | |
| | | } |
| | | } |
| | | } |
| | | //注意----区分工控网与涉密网!!! 涉密网进行NC文件的拷贝,工控网负责进行解析NC文件 |
| | | if (deployType.equals(DeployEnum.SMW.getCode())) { |
| | | handleFileProcessing(docFile, mdcEquipment, secretFolder); |
| | | 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); |
| | | } |
| | | //涉密网进行NC文件的拷贝 |
| | | handleFileTransfer(mdcEquipment, docFile); |
| | | //NC文件的拷贝 |
| | | handleFileProcessing(docFile, mdcEquipment, secretFolder); |
| | | //对应产品结构树拷贝 |
| | | handleProductTree(docInfo,docRelativeList.get(0),mdcEquipment.getEquipmentId()); |
| | | return synchronizedFlagService.updateFlag(1); |
| | | }else if(up.getStatus() == 3) { |
| | | //拒绝操作 什么也不做 |
| | |
| | | } |
| | | |
| | | //插入文件传输任务表 |
| | | private void handleFileTransfer(MdcEquipment mdcEquipment, DocFile 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(), "/"); |
| | |
| | | //封装处理文件 |
| | | private void handleFileProcessing(DocFile docFile, MdcEquipment mdcEquipment, String secretFolder) { |
| | | if (!docFile.getFileSuffix().equals("zip") && !docFile.getFileSuffix().equals("rar")) { |
| | | String size = FileUtilS.fileSizeNC(docFile.getFilePath(), docFile.getFileEncodeName()); |
| | | List<String> strings = iMdcProductionService.findListParentTreeAll(mdcEquipment.getId()); |
| | | if (strings != null && !strings.isEmpty()) { |
| | | DncPassLog passInfoTxt = new DncPassLog(); |
| | |
| | | /*查询最后一条记录*/ |
| | | //休眠 500毫秒 |
| | | DncPassLog dncPassLog = dncPassLogService.findDayTime(DateUtil.format(dateFirst,DateUtil.STR_YEARMONTHDAY)); |
| | | int fileTxt = 0, fileNc =0; |
| | | int fileNc =0; |
| | | if (dncPassLog !=null) { |
| | | fileTxt = dncPassLog.getSequenceNumber() + 1; |
| | | fileNc = dncPassLog.getSequenceNumber() + 1; |
| | | } else { |
| | | fileTxt = 1; |
| | | fileNc = 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); |
| | |
| | | } catch (InterruptedException e) { |
| | | e.printStackTrace(); |
| | | } |
| | | |
| | | dncPassLogService.save(passInfoNc); |
| | | NcTxtFilePathInfo ncTxt = new NcTxtFilePathInfo(); |
| | | ncTxt.setEquipmentId(mdcEquipment.getEquipmentId()); |
| | | ncTxt.setFileNcName("10A"+DateUtil.format(dateFirst,DateUtil.STR_YEARMONTHDAY)+sequenceNc); |
| | | ncTxt.setFileTxtName("10A"+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 = secretFolder +"/"+ 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(), |
| | | secretFolder +"/"+ncTxt.getFileNcName(), |
| | | docFile.getFileSuffix(), "NC"); |
| | | if (!copyFileNc) { |
| | | FileUtilS.deleteNcFile(loFilePath); |
| | | } |
| | | } catch (IOException e) { |
| | | throw new RuntimeException("文件处理失败", e); |
| | | } |
| | | FileUtilS.copyFileUpName(path + "/" + mdcEquipment.getEquipmentId() + "/send/" + |
| | | docFile.getFileName(), |
| | | secretFolder +"/"+"10A"+DateUtil.format(dateFirst,DateUtil.STR_YEARMONTHDAY)+sequenceNc+"_"+mdcEquipment.getEquipmentId(), |
| | | docFile.getFileSuffix(), "NC"); |
| | | } |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 处理对应产品结构树、nc文件、刀具列表、程序加工确认表封装 |
| | | * @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();//接下来审批的节点 |