package cn.cslg.pas.service.importPatent; import cn.cslg.pas.common.dto.UploadPatentWebDTO; import cn.cslg.pas.common.model.cronModel.SystemFile; import cn.cslg.pas.common.utils.FileUtils; import cn.cslg.pas.common.utils.FormatUtil; import cn.cslg.pas.common.utils.ReadExcelUtils; import cn.cslg.pas.common.vo.ImportTaskAMVO; import cn.cslg.pas.common.vo.PatentData; import cn.cslg.pas.common.vo.UploadParamsVO; import cn.cslg.pas.common.vo.UploadSettingVO; import cn.cslg.pas.domain.es.Patent; import cn.cslg.pas.domain.es.Text; import cn.cslg.pas.service.common.ExcuteDataToVOService; import cn.cslg.pas.service.common.ExcuteUploadSettingService; import cn.cslg.pas.service.common.FileManagerService; import cn.cslg.pas.service.common.MessageService; import cn.hutool.core.util.IdUtil; import com.alibaba.fastjson.JSONArray; import org.apache.commons.compress.utils.IOUtils; import org.apache.poi.ss.usermodel.PictureData; import org.apache.poi.ss.usermodel.Sheet; import org.springframework.beans.factory.annotation.Configurable; import org.springframework.context.ApplicationContext; import org.springframework.mock.web.MockMultipartFile; import org.springframework.web.multipart.MultipartFile; import java.io.ByteArrayInputStream; import java.io.File; import java.io.FileOutputStream; import java.io.InputStream; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; @Configurable public class GetPatentPictureFromExcelThread extends Thread { private ImportTaskAMVO importTaskAMVO; private ApplicationContext applicationContext; private SavePatentToEsThread savePatentToEsThread; private Boolean ifProductAll = false; private List uploadPatentWebDTOS = new ArrayList<>(); private TaskThread taskThread; private final Lock taskLock = new ReentrantLock(); private final Condition taskCondition = taskLock.newCondition(); @Override public void run() { try { while ((!ifProductAll || uploadPatentWebDTOS.size() > 0) && importTaskAMVO.getState().equals(1)) { if (uploadPatentWebDTOS.size() == 0) { taskLock.lock(); taskCondition.await(); } UploadPatentWebDTO uploadPatentWebDTO = uploadPatentWebDTOS.remove(0); String guid = FormatUtil.getPictureFormat(uploadPatentWebDTO.getPatent().getAppNo()); PictureData pictureData = uploadPatentWebDTO.getPictureData(); if(pictureData!=null){ String ext = pictureData.suggestFileExtension(); byte[] data = pictureData.getData(); String picName = IdUtil.simpleUUID(); File file = FileUtils.getFileByBytes(data, picName, "." + ext); FileManagerService fileManagerService = applicationContext.getBean(FileManagerService.class); fileManagerService.uploadFileWithGuid(file, guid); } taskThread.ifPatentDone(uploadPatentWebDTO); MessageService messageService = applicationContext.getBean(MessageService.class); messageService.sendWebsocketMessage(importTaskAMVO,2); } taskThread.awakeTaskThread(); } catch (Exception e) { taskThread.awakeTaskThread(); e.printStackTrace(); } } public GetPatentPictureFromExcelThread(TaskThread taskThread) { this.importTaskAMVO = taskThread.getImportTaskAMVO(); this.savePatentToEsThread = savePatentToEsThread; this.applicationContext = taskThread.getApplicationContext(); this.taskThread = taskThread; } public void awakeTask(UploadPatentWebDTO uploadPatentWebDTO) { uploadPatentWebDTOS.add(uploadPatentWebDTO); if (taskLock.tryLock()) { taskCondition.signalAll(); taskLock.unlock(); } } // public void setIfProductAll(Boolean ifProductAll) { this.ifProductAll = ifProductAll; } }