liusheng
3 天以前 ab21541dc210180d1fef5b4351e416ee5c5be0db
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
package cn.lihu.jh.module.ecg.controller.admin.freemark;
 
import cn.lihu.jh.module.ecg.dal.dataobject.appointment.AppointmentDO;
import cn.lihu.jh.module.ecg.service.appointment.AppointmentService;
import freemarker.template.Configuration;
import freemarker.template.Template;
import io.swagger.v3.oas.annotations.Operation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.util.StringUtils;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
 
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.net.URLEncoder;
import java.time.LocalDate;
import java.time.Period;
import java.util.Calendar;
import java.util.HashMap;
import java.util.Map;
 
@Slf4j
@RestController
@RequestMapping("/ecg/template")
@Validated
public class TemplateCreateController {
 
    @Resource
    private AppointmentService appointmentService;
 
 
    private static Configuration configuration = null;
 
    public TemplateCreateController() {
        configuration = new Configuration();
        configuration.setDefaultEncoding("utf-8");
    }
 
    @Operation(summary = "知情同意运动试验")
    @GetMapping(value = "/download/{id}")
    public void downloadInfo(@PathVariable("id") Long id, HttpServletResponse response) {
        log.info("知情同意运动试验:{}", id);
 
        try {
            Map<String, Object> dataMap = new HashMap<>();
            AppointmentDO appointment = appointmentService.getAppointment(id);
            getData(dataMap, appointment);
 
            String filePath = getClass().getResource("/template/").getPath();
            configuration.setDirectoryForTemplateLoading(new File(filePath));
            Template t = configuration.getTemplate("知情同意运动试验.ftl");
 
            String timestamp = String.valueOf(System.currentTimeMillis());
            String fileName = "知情同意运动试验-" + appointment.getPatName() + "-" + timestamp + ".doc";
 
            // 设置响应头,告诉浏览器进行下载
            response.setCharacterEncoding("UTF-8");
            response.setContentType("application/msword"); // Word文档类型
            response.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode(fileName, "UTF-8"));
 
            // 直接输出到response的输出流
            Writer out = new BufferedWriter(new OutputStreamWriter(response.getOutputStream(), "UTF-8"));
            t.process(dataMap, out);
            out.flush();
            out.close();
 
        } catch (Exception e) {
            log.error("下载知情同意运动试验文档失败", e);
            try {
                response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "文档生成失败");
            } catch (IOException ex) {
                log.error("发送错误响应失败", ex);
            }
        }
    }
 
 
    @Operation(summary = "食管心脏电生理知情同意书")
    @GetMapping(value = "/downloadesophagus/{id}")
    public void downloadEsophagusInfo(@PathVariable("id") Long id, HttpServletResponse response) {
        log.info("食管心脏电生理知情同意书:{}", id);
 
        try {
            Map<String, Object> dataMap = new HashMap<>();
            AppointmentDO appointment = appointmentService.getAppointment(id);
            getData(dataMap, appointment);
 
            String filePath = getClass().getResource("/template/").getPath();
            configuration.setDirectoryForTemplateLoading(new File(filePath));
            Template t = configuration.getTemplate("食管心脏电生理知情同意书.ftl");
 
            String timestamp = String.valueOf(System.currentTimeMillis());
            String fileName = "食管心脏电生理知情同意书-" + appointment.getPatName() + "-" + timestamp + ".doc";
 
            // 设置响应头,告诉浏览器进行下载
            response.setCharacterEncoding("UTF-8");
            response.setContentType("application/msword"); // Word文档类型
            response.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode(fileName, "UTF-8"));
 
            // 直接输出到response的输出流
            Writer out = new BufferedWriter(new OutputStreamWriter(response.getOutputStream(), "UTF-8"));
            t.process(dataMap, out);
            out.flush();
            out.close();
 
        } catch (Exception e) {
            log.error("下载食管心脏电生理知情同意书文档失败", e);
            try {
                response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "文档生成失败");
            } catch (IOException ex) {
                log.error("发送错误响应失败", ex);
            }
        }
    }
 
    private void getData(Map dataMap, AppointmentDO appointment) {
        dataMap.put("name", StringUtils.isEmpty(appointment.getPatName()) ? "" : appointment.getPatName());
        dataMap.put("sex", appointment.getPatGender() == null ? "" : appointment.getPatGender() == 1 ? "男" : "女");
        dataMap.put("age", appointment.getPatBirthday() == null ? "" : calculateAge(appointment.getPatBirthday()));
        dataMap.put("inhospno", StringUtils.isEmpty(appointment.getHospitalNo()) ? "" : appointment.getHospitalNo());
        dataMap.put("idNo", StringUtils.isEmpty(appointment.getPatId()) ? "" : appointment.getPatId());
        dataMap.put("badNo", StringUtils.isEmpty(appointment.getPatBedNo()) ? "" : appointment.getPatBedNo());
        dataMap.put("birthday", appointment.getPatBirthday() == null ? "" : appointment.getPatBirthday());
        dataMap.put("doctor", StringUtils.isEmpty(appointment.getDoctor()) ? "" : appointment.getDoctor());
        dataMap.put("deptName", StringUtils.isEmpty(appointment.getPatDeptDesc()) ? "" : appointment.getPatDeptDesc());
        dataMap.put("episodeId", StringUtils.isEmpty(appointment.getEpisodeId()) ? "" : appointment.getEpisodeId());
 
    }
 
    public int calculateAge(LocalDate birthdayStr) {
        return Period.between(birthdayStr, LocalDate.now()).getYears();
    }
 
}