sinake
2026-08-25 cdc983f13b91cfd605d1442289a7ce04dba808ba
ruoyi-admin/src/main/java/com/ruoyi/web/controller/project/ServiceEthicalreviewopinionsController.java
@@ -14,6 +14,7 @@
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.PageUtils;
import com.ruoyi.common.utils.file.FileUtils;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.project.domain.ServiceDonateorganBase;
import com.ruoyi.project.domain.ServiceEthicalreviewinitiate;
@@ -33,11 +34,16 @@
import org.apache.commons.lang3.ObjectUtils;
import org.apache.poi.ss.formula.functions.Now;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.*;
@@ -199,12 +205,27 @@
        }
        EthicalreviewopinionsStateTotalVO  stateTotalVO=serviceEthicalreviewopinionsService.stateTotalAll(nitiateId);
        String filePath = getClass().getResource("/template/").getPath();
        File directory = new File("");// 参数为空
        String filePath1 = null;
        try {
            filePath1 = directory.getCanonicalPath()+"\\template\\";
        } catch (IOException e) {
        }
        if(filePath.substring(0,1).equals("/"))
            filePath=filePath.substring(1);
        String content ="";
        Template t = null;
        try {
            content = Files.readString(Paths.get(filePath+"遗体器官获取伦理审查表首页.xml"), StandardCharsets.UTF_8);
            //content = Files.readString(Paths.get(filePath+"遗体器官获取伦理审查表首页.xml"), StandardCharsets.UTF_8);
            Path path = Paths.get(filePath1 + "遗体器官获取伦理审查表首页.xml");
            if(Files.exists(path)) {
                byte[] bytes = Files.readAllBytes(path);
                content = new String(bytes, StandardCharsets.UTF_8);
            }else{
                path = Paths.get(filePath + "遗体器官获取伦理审查表首页.xml");
                byte[] bytes = Files.readAllBytes(path);
                content = new String(bytes, StandardCharsets.UTF_8);
            }
            String name=list.get(0).getName()+"(住院号:"+list.get(0).getInpatientno()+")";
            content=content.replace("$name",name);//项目名称
@@ -217,11 +238,64 @@
            String committeeOpinion="";
            for (EthicalReviewVO row:list) {
                String State="",sgin="",id=row.getId()+"",expName=row.getExpertname();
                if(ObjectUtils.isNotEmpty(row.getSigin())){
//                    byte[] imageBytes = Files.readAllBytes(Paths.get(row.getSigin()));
//                    sgin=Base64.getEncoder().encodeToString(imageBytes);
                    HttpURLConnection connection = null;
                    InputStream inputStream = null;
                    ByteArrayOutputStream outputStream = null;
                    try {
                        URL url = new URL(row.getSigin());
                        connection = (HttpURLConnection) url.openConnection();
                        connection.setRequestMethod("GET");
                        connection.setConnectTimeout(5000);
                        connection.setReadTimeout(5000);
                        if (connection.getResponseCode() != HttpURLConnection.HTTP_OK) {
                            sgin="";
                        }
                        inputStream = connection.getInputStream();
                        outputStream = new ByteArrayOutputStream();
                        byte[] buffer = new byte[1024];
                        int bytesRead;
                        while ((bytesRead = inputStream.read(buffer)) != -1) {
                            outputStream.write(buffer, 0, bytesRead);
                        }
                        byte[] imageBytes = outputStream.toByteArray();
                        sgin= Base64.getEncoder().encodeToString(imageBytes);
                    }catch (Exception e){
                        sgin="";
                    }finally {
                        if (inputStream != null) {
                            try {
                                inputStream.close();
                            } catch (IOException e) {
                            }
                        }
                        if (outputStream != null) {
                            try {
                                outputStream.close();
                            } catch (IOException e) {
                            }
                        }
                        if (connection != null) {
                            connection.disconnect();
                        }
                    }
                }
                if(expName.length()==2) expName=expName.substring(0,1)+"  "+expName.substring(1);
                if(row.getReceiveStatus().equals("1"))State="已同意";
                else if(row.getReceiveStatus().equals("2")) State="不同意";
                else if(row.getReceiveStatus().equals("3")) State="弃权";
                else if(row.getReceiveStatus().equals("4")) State="修改后同意";
                if(row.getReceiveStatus().equals("0"))State="待接收";
                else if(row.getReceiveStatus().equals("1")) State="未接收";
                else if(row.getReceiveStatus().equals("2")) State="已接收";
                else if(row.getReceiveStatus().equals("3")) State="超时";
                else if(row.getReceiveStatus().equals("4")) State="中止";
                else if(row.getReceiveStatus().equals("5")) State="完成";
                committeeOpinion+=" <w:tr wsp:rsidR=\"00425E28\" wsp:rsidRPr=\"00CB3FB5\" wsp:rsidTr=\"00425E28\"><w:trPr><w:trHeight w:val=\"680\"/></w:trPr>\n" +
                        "            <w:tc><w:tcPr><w:tcW w:w=\"885\" w:type=\"dxa\"/><w:vmerge/><w:shd w:val=\"clear\" w:color=\"auto\" w:fill=\"auto\"/><w:vAlign\n" +
                        "                    w:val=\"center\"/></w:tcPr>\n" +
@@ -230,7 +304,7 @@
                        "            <w:tc><w:tcPr></w:tcPr>\n" +
                        "                <w:p wsp:rsidR=\"00425E28\" wsp:rsidRPr=\"00CB3FB5\" wsp:rsidRDefault=\"00AC7CCA\" wsp:rsidP=\"00CB3FB5\">\n" +
                        "                    <w:r wsp:rsidRPr=\"00737357\">\n" +
                        "                        <w:t>【委员审批】"+expName+"  "+State+" </w:t></w:r>\n" +
                        "                        <w:spacing w:line=\"480\" w:line-rule=\"auto\"/><w:t>【委员审批】"+expName+"  "+State+" </w:t></w:r>\n" +
                        "                   </w:p>\n" +
                        "            </w:tc>\n" +
                        "            <w:tc><w:tcPr></w:tcPr>\n" +
@@ -239,17 +313,15 @@
                        "                        <w:t>签名:</w:t></w:r>\n" +
                        "                    <w:r wsp:rsidR=\"00421BE1\">\n" ;
                        if(sgin.length()>10) {
                            committeeOpinion +=  "                        <w:pict>\n" +
                                    "                        <w:binData w:name=\"wordml://03000001.png\" xml:space=\"preserve\"> " + sgin + "</w:binData>\n" +
                                    "                            <v:shape style=\"width:50pt;height:20pt\"><v:imagedata src=\"wordml://03000001.png\" o:title=\"my签字\"/></v:shape>\n" +
                                    "                        </w:pict>\n" ;
                            committeeOpinion +="<w:pict><w:binData w:name=\"wordml://03000001.png\" xml:space=\"preserve\">\n" + sgin + "\n" +
                                    "</w:binData><v:shape  style=\"width:50pt;height:20pt\"><v:imagedata src=\"wordml://03000001.png\" o:title=\"\"/></v:shape></w:pict>\n" ;
                        }
                committeeOpinion += "                    </w:r>\n" +
                        "                </w:p>\n" +
                        "            </w:tc>\n" +
                        "            <w:tc><w:tcPr></w:tcPr>\n" +
                        "                <w:p wsp:rsidR=\"00425E28\" wsp:rsidRPr=\"00CB3FB5\" wsp:rsidRDefault=\"00AC7CCA\" wsp:rsidP=\"00CB3FB5\">\n" +
                        "                    <w:r wsp:rsidRPr=\"00737357\"><w:t>"+DateUtils.parseDateToStr("yyyy-MM-dd HH:mm:ss",row.getConclusiontime())+"</w:t></w:r></w:p>\n" +
                        "                    <w:spacing w:line=\"480\" w:line-rule=\"auto\"/><w:r wsp:rsidRPr=\"00737357\"><w:t>"+DateUtils.parseDateToStr("yyyy-MM-dd HH:mm:ss",row.getConclusiontime())+"</w:t></w:r></w:p>\n" +
                        "            </w:tc>\n" +
                        "        </w:tr>";
               }
@@ -268,12 +340,21 @@
        if (!folderPath.exists()) {
            folderPath.mkdirs();
        }
/*
        try {
            Files.writeString(Paths.get(filePathData+ "/" + name + ".doc"),content);
        } catch (Exception e1) {
            e1.printStackTrace();
        }
*/
        try {
            Path path = Paths.get(filePathData + "/" + name + ".doc");
            Files.write(path, content.getBytes(StandardCharsets.UTF_8));
        } catch (Exception e1) {
            e1.printStackTrace();
        }
        Map<String, Object> map = new HashMap<>();
        map.put("downloadUrl", "/download/wordtemplate/" + name + ".doc");