sinake
5 天以前 a060b902fa7083c7cdcc4ae379f629b5d3c6d472
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
package com.ruoyi.web.controller.project;
 
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.annotation.NotRepeatCommit;
import com.ruoyi.common.annotation.RepeatSubmit;
import com.ruoyi.common.config.RuoYiConfig;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.domain.Result;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.PageUtils;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.project.domain.ServiceDonateorganBase;
import com.ruoyi.project.domain.ServiceEthicalreviewinitiate;
import com.ruoyi.project.domain.ServiceEthicalreviewopinions;
import com.ruoyi.project.domain.vo.EthicalReviewVO;
import com.ruoyi.project.domain.vo.EthicalreviewopinionsStateTotalVO;
import com.ruoyi.project.domain.vo.EthicalreviewopinionsTotalVO;
import com.ruoyi.project.service.IServiceEthicalreviewinitiateService;
import com.ruoyi.project.service.IServiceEthicalreviewopinionsService;
import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.poi.ss.formula.functions.Now;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
 
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.*;
 
/**
 * 伦理审查专家意见Controller
 *
 * @author ruoyi
 * @date 2021-11-23
 */
@RestController
@RequestMapping("/project/ethicalreviewopinions")
@Api(description = "伦理审查专家意见",tags={"伦理审查专家意见"})
public class ServiceEthicalreviewopinionsController extends BaseController {
    @Autowired
    private IServiceEthicalreviewopinionsService serviceEthicalreviewopinionsService;
 
    @Autowired
    private IServiceEthicalreviewinitiateService serviceEthicalreviewinitiateService;
 
    @ApiOperation("查询伦理审查专家意见列表")
    /**
     * 查询伦理审查专家意见列表
     */
    //// @PreAuthorize("@ss.hasPermi('project:ethicalreviewopinions:list')")
    @GetMapping("/list")
    public Map<String, Object> list(ServiceEthicalreviewopinions serviceEthicalreviewopinions) {
        serviceEthicalreviewopinionsService.updateTimeOut();
        Page<ServiceEthicalreviewopinions> list = serviceEthicalreviewopinionsService.queryListByPage(serviceEthicalreviewopinions);
        return getDataTable(list.getRecords(), (int) list.getTotal());
    }
 
    @ApiOperation("查询捐献信息伦理审查专家意见列表")
    @GetMapping("/listnew")
    public TableDataInfo listnew(EthicalReviewVO ethicalReviewVO) {
        startPage();
        List<EthicalReviewVO> list = serviceEthicalreviewopinionsService.selectVOList(ethicalReviewVO);
        return getDataTable(list);
    }
 
 
//    /**
//     * 导出伦理审查专家意见列表
//     */
//    //// @PreAuthorize("@ss.hasPermi('project:ethicalreviewopinions:export')")
//    @Log(title = "伦理审查专家意见", businessType = BusinessType.EXPORT)
//    @GetMapping("/export")
//    public AjaxResult export(ServiceEthicalreviewopinions serviceEthicalreviewopinions) {
//        List<ServiceEthicalreviewopinions> list = serviceEthicalreviewopinionsService.queryList(serviceEthicalreviewopinions);
//        ExcelUtil<ServiceEthicalreviewopinions> util = new ExcelUtil<ServiceEthicalreviewopinions>(ServiceEthicalreviewopinions.class);
//        return util.exportExcel(list, "伦理审查专家意见数据");
//    }
 
    @ApiOperation("获取伦理审查专家意见详细信息")
    /**
     * 获取伦理审查专家意见详细信息
     */
    //// @PreAuthorize("@ss.hasPermi('project:ethicalreviewopinions:query')")
    @GetMapping(value = "/{id}")
    public AjaxResult getInfo(@PathVariable("id") Long id) {
        return AjaxResult.success(serviceEthicalreviewopinionsService.getById(id));
    }
 
    @ApiOperation("新增伦理审查专家意见")
    /**
     * 新增伦理审查专家意见
     */
    //// @PreAuthorize("@ss.hasPermi('project:ethicalreviewopinions:add')")
    @Log(title = "新增伦理审查专家意见", businessType = BusinessType.INSERT)
    @PostMapping("/add")
    public AjaxResult add(@RequestBody ServiceEthicalreviewopinions serviceEthicalreviewopinions) {
        boolean save = serviceEthicalreviewopinionsService.save(serviceEthicalreviewopinions);
        return AjaxResult.success(serviceEthicalreviewopinions);
    }
 
    @ApiOperation("修改伦理审查专家意见")
    /**
     * 修改伦理审查专家意见
     */
    //// @PreAuthorize("@ss.hasPermi('project:ethicalreviewopinions:edit')")
    @Log(title = "伦理审查专家意见", businessType = BusinessType.UPDATE)
    @PostMapping("/edit")
//    @RepeatSubmit
    public AjaxResult edit(@RequestBody ServiceEthicalreviewopinions serviceEthicalreviewopinions) {
        boolean res=serviceEthicalreviewopinionsService.updateById(serviceEthicalreviewopinions);
        if(res&&serviceEthicalreviewopinions.getExpertType().equals("主任委员")&&serviceEthicalreviewopinions.getReceiveStatus().equals("5")){
            QueryWrapper<ServiceEthicalreviewinitiate> ethicalreviewinitiateQueryWrapper=new QueryWrapper<>();
            ethicalreviewinitiateQueryWrapper.eq("id",serviceEthicalreviewopinions.getNitiateId());
            ServiceEthicalreviewinitiate serviceEthicalreviewinitiate =new ServiceEthicalreviewinitiate();
            serviceEthicalreviewinitiate.setStatus("3");
            res=serviceEthicalreviewinitiateService.update(serviceEthicalreviewinitiate,ethicalreviewinitiateQueryWrapper);
        }
        return toAjax(res);
    }
 
    @ApiOperation("删除伦理审查专家意见")
    /**
     * 删除伦理审查专家意见
     */
    //// @PreAuthorize("@ss.hasPermi('project:ethicalreviewopinions:remove')")
    @Log(title = "伦理审查专家意见", businessType = BusinessType.DELETE)
    @GetMapping("/remove/{ids}")
    public AjaxResult remove(@PathVariable Long[] ids) {
        return toAjax(serviceEthicalreviewopinionsService.removeByIds(Arrays.asList(ids)));
    }
 
    /**
     * 获取伦理审查专家数量
     */
    @ApiOperation("获取伦理审查专家数量")
    @GetMapping(value = "/expertCount")
    public AjaxResult count(Integer nitiateId) {
        QueryWrapper<ServiceEthicalreviewopinions> ethicalreviewopinionsWrapper=new QueryWrapper<>();
        ethicalreviewopinionsWrapper.eq("nitiate_Id",nitiateId);
        long count =serviceEthicalreviewopinionsService.count(ethicalreviewopinionsWrapper);
        return AjaxResult.success(count);
    }
 
    /**
     * 获取伦理审查专家接收
     */
    @ApiOperation("获取伦理审查专家状态")
    @GetMapping("/receiveStatus")
    public AjaxResult receiveStatus(Integer nitiateId,String expertNo,String receiveStatus) {
        QueryWrapper<ServiceEthicalreviewopinions> ethicalreviewopinionsWrapper=new QueryWrapper<>();
        ethicalreviewopinionsWrapper.eq("nitiate_Id",nitiateId).eq("expert_no",expertNo);
        ServiceEthicalreviewopinions serviceEthicalreviewopinions =new ServiceEthicalreviewopinions();
        serviceEthicalreviewopinions.setReceiveStatus(receiveStatus);
        return toAjax(serviceEthicalreviewopinionsService.update(serviceEthicalreviewopinions,ethicalreviewopinionsWrapper));
    }
 
 
    @ApiOperation("专家统计详情")
    @GetMapping(value = "/expertTotal")
    public Result<List<EthicalreviewopinionsTotalVO>> expertTotal(String expertNo) {
        return Result.success(serviceEthicalreviewopinionsService.expertTotal(expertNo)) ;
    }
 
 
    @ApiOperation("专家状态统计")
    @GetMapping(value = "/stateTotal")
    public Result<List<EthicalreviewopinionsStateTotalVO>> stateTotal(String expertNo) {
        return Result.success(serviceEthicalreviewopinionsService.stateTotal(expertNo));
    }
 
    /**
     * 下载工作人员差旅费报销单
     */
    @ApiOperation("遗体器官获取伦理审查表")
    @GetMapping(value = "/download")
    public Result downloadInfo(String nitiateId) throws IOException {
        if(ObjectUtils.isEmpty(nitiateId)){
            return Result.error("nitiateId伦理审查id不能为空");
        }
        EthicalReviewVO reviewVO =new EthicalReviewVO();
        reviewVO.setNitiateId(nitiateId);
        List<EthicalReviewVO> list = serviceEthicalreviewopinionsService.selectVOList(reviewVO);
        if(list.size()==0){
            return Result.error("伦理审查id无相关数据");
        }
        EthicalreviewopinionsStateTotalVO  stateTotalVO=serviceEthicalreviewopinionsService.stateTotalAll(nitiateId);
        String filePath = getClass().getResource("/template/").getPath();
        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);
            Path 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);//项目名称
 
            content=content.replace("$inCount",stateTotalVO.getInCount());//到会委员
            content=content.replace("$avoidCount","0");//回避委员
            content=content.replace("$agreeCount",stateTotalVO.getAgreeCount());//同意
            content=content.replace("$updateAgreeCount",stateTotalVO.getRejectCount());//修改后同意
            content=content.replace("$disagreeCount",stateTotalVO.getDisagreeCount());//不同意
            content=content.replace("$abstentionCount",stateTotalVO.getWaiveCount());//弃权
            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="修改后同意";
                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" +
                        "                <w:p wsp:rsidR=\"00425E28\" wsp:rsidRPr=\"00CB3FB5\" wsp:rsidRDefault=\"00425E28\" wsp:rsidP=\"006A1099\"><w:pPr></w:pPr></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\">\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" +
                        "                <w:p wsp:rsidR=\"00425E28\" wsp:rsidRPr=\"00CB3FB5\" wsp:rsidRDefault=\"00AC7CCA\" wsp:rsidP=\"00CB3FB5\">\n" +
                        "                    <w:r wsp:rsidRPr=\"00737357\">\n" +
                        "                        <w:t>签名:</w:t></w:r>\n" +
                        "                    <w:r wsp:rsidR=\"00421BE1\">\n" ;
                        if(sgin.length()>10) {
                            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: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>";
               }
            content=content.replace("$committeeOpinion",committeeOpinion);//委员会意见
            content=content.replace("$dateContent",DateUtils.parseDateToStr("yyyy年MM月dd日",new Date()));//日期
 
        } catch (Exception e) {
            e.printStackTrace();
        }
        String newTime = String.valueOf(Calendar.getInstance().getTimeInMillis());
        String name = "遗体器官获取伦理审查表_"+nitiateId+"_" +  newTime;
 
        String filePathData =RuoYiConfig.getProfile() + "/download/wordtemplate";
        //创建文件夹
        File folderPath = new File(filePathData);
        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");
        map.put("downloadName", name + ".doc");
        return Result.success(map);
    }
}