Commit bef39fe38399e7ddcb411e2789dd14106415100a
1 parent
d432625adb
Exists in
dev
#fix:优化五色专案管理,建档统计功能,新增导出Excel合并单元格等功能逻辑
Showing 8 changed files with 406 additions and 15 deletions
- platform-biz-service/src/main/java/com/lyms/platform/permission/model/AppointmentQuery.java
- platform-biz-service/src/main/resources/mainOrm/master/AppointmentMapper.xml
- platform-common/src/main/java/com/lyms/platform/common/utils/ExcelUtil.java
- platform-dal/src/main/java/com/lyms/platform/pojo/AppointmentData.java
- platform-dal/src/main/java/com/lyms/platform/pojo/AppointmentModel.java
- platform-operate-api/src/main/java/com/lyms/hospitalapi/dtdyrm/DtdyrmFmService.java
- platform-operate-api/src/main/java/com/lyms/platform/operate/web/controller/PatientDtController.java
- platform-operate-api/src/main/java/com/lyms/platform/operate/web/request/AppointmentExport.java
platform-biz-service/src/main/java/com/lyms/platform/permission/model/AppointmentQuery.java
View file @
bef39fe
... | ... | @@ -9,6 +9,7 @@ |
9 | 9 | private String name; |
10 | 10 | private String dept; |
11 | 11 | private String idCard; |
12 | + private String deptName; | |
12 | 13 | |
13 | 14 | public String getIdCard() { |
14 | 15 | return idCard; |
... | ... | @@ -56,6 +57,14 @@ |
56 | 57 | |
57 | 58 | public void setDept(String dept) { |
58 | 59 | this.dept = dept; |
60 | + } | |
61 | + | |
62 | + public String getDeptName() { | |
63 | + return deptName; | |
64 | + } | |
65 | + | |
66 | + public void setDeptName(String deptName) { | |
67 | + this.deptName = deptName; | |
59 | 68 | } |
60 | 69 | } |
platform-biz-service/src/main/resources/mainOrm/master/AppointmentMapper.xml
View file @
bef39fe
... | ... | @@ -39,6 +39,9 @@ |
39 | 39 | <if test="dept!=null"> |
40 | 40 | and (dept like concat(#{dept},'%') or (dept like concat("产后",'%') and dept !='产后服务部')) |
41 | 41 | </if> |
42 | + <if test="deptName!=null"> | |
43 | + and dept =#{deptName} | |
44 | + </if> | |
42 | 45 | and <![CDATA[checkTime>=#{startTime}]]> |
43 | 46 | and <![CDATA[checkTime<=#{endTime}]]> |
44 | 47 | <include refid="orderAndLimit"/> |
platform-common/src/main/java/com/lyms/platform/common/utils/ExcelUtil.java
View file @
bef39fe
1 | 1 | package com.lyms.platform.common.utils; |
2 | 2 | |
3 | 3 | import java.io.*; |
4 | +import java.math.BigDecimal; | |
4 | 5 | import java.util.*; |
5 | 6 | |
6 | 7 | |
... | ... | @@ -13,6 +14,10 @@ |
13 | 14 | import jxl.write.*; |
14 | 15 | import jxl.write.Number; |
15 | 16 | import jxl.write.biff.RowsExceededException; |
17 | +import org.apache.poi.ss.usermodel.CellStyle; | |
18 | +import org.apache.poi.ss.usermodel.HorizontalAlignment; | |
19 | +import org.apache.poi.ss.usermodel.Row; | |
20 | +import org.apache.poi.xssf.usermodel.XSSFWorkbook; | |
16 | 21 | |
17 | 22 | /** |
18 | 23 | * Excel 工具类 |
... | ... | @@ -162,6 +167,93 @@ |
162 | 167 | return out; |
163 | 168 | } |
164 | 169 | |
170 | + /** | |
171 | + * 合并单元格导出 | |
172 | + * @param out | |
173 | + * @param data | |
174 | + * @param columName | |
175 | + * @return | |
176 | + */ | |
177 | + public static OutputStream toExcelRegion(OutputStream out,Map<String,Map<String,Object>> params ,Map<String,List<Map<String,Object>>> data, Map<String, String> columName) { | |
178 | + WritableWorkbook wwb; | |
179 | + try { | |
180 | + wwb = Workbook.createWorkbook(out); | |
181 | + // 创建一个新的工作表 | |
182 | + WritableSheet ws = wwb.createSheet("sheet", 0); // 创建一个工作表 | |
183 | + /** | |
184 | + * 设置单元格样式 | |
185 | + */ | |
186 | + WritableFont wf = new WritableFont(WritableFont.ARIAL, 12, WritableFont.BOLD, false, UnderlineStyle.NO_UNDERLINE, Colour.BLACK); | |
187 | + | |
188 | + WritableCellFormat wcf = new WritableCellFormat(wf); | |
189 | + ws.setRowView(0, 300); // 设置指定行高 | |
190 | + // 设置列宽 | |
191 | + Iterator<String> ite = columName.keySet().iterator(); | |
192 | + int i = 0; | |
193 | + while (ite.hasNext()) { | |
194 | + ws.setColumnView(i, 15); | |
195 | + String keyName = ite.next(); | |
196 | + keyName = columName.get(keyName); | |
197 | + ws.addCell(new Label(i, 0, keyName, wcf)); | |
198 | + i++; | |
199 | + } | |
200 | + //int j = 1; | |
201 | + int s=0; | |
202 | + for (Map.Entry<String,Map<String,Object>> entry:params.entrySet()) { | |
203 | + // 填充数据的内容 | |
204 | + Map<String, Object> map= entry.getValue(); | |
205 | + List<Map<String,Object>> dataList= data.get(entry.getKey()); | |
206 | + /* if (j==1){ | |
207 | + ws.addCell(new Label(0, j, String.valueOf(map.get("dept")))); | |
208 | + ws.addCell(new Label(1, j, String.valueOf(map.get("appointmentSumNum")))); | |
209 | + ws.addCell(new Label(2, j, String.valueOf(map.get("buildSumNum")))); | |
210 | + ws.addCell(new Label(3, j, String.valueOf(map.get("newBuildSumNum")))); | |
211 | + ws.addCell(new Label(4, j, String.valueOf(map.get("unBuildSumNum")))); | |
212 | + }else {*/ | |
213 | + ////新建/(总-已建档+新建档) | |
214 | + ws.addCell(new Label(0, s+1, String.valueOf(map.get("dept")))); | |
215 | + ws.addCell(new Label(1, s+1, String.valueOf(map.get("appointmentSumNum")))); | |
216 | + ws.addCell(new Label(2, s+1, String.valueOf(map.get("buildSumNum")))); | |
217 | + ws.addCell(new Label(3, s+1, String.valueOf(map.get("newBuildSumNum")))); | |
218 | + ws.addCell(new Label(4, s+1, String.valueOf(map.get("unBuildSumNum")))); | |
219 | + ws.addCell(new Label(5, s+1, new BigDecimal(String.valueOf(map.get("buildSumNum"))).multiply(new BigDecimal("100")).divide(new BigDecimal(String.valueOf(map.get("appointmentSumNum"))),2,BigDecimal.ROUND_HALF_UP).toPlainString()+"%")); | |
220 | + ws.addCell(new Label(6, s+1,new BigDecimal(String.valueOf(map.get("newBuildSumNum"))).multiply(new BigDecimal("100")).divide((new BigDecimal(String.valueOf(map.get("appointmentSumNum"))).add(new BigDecimal(String.valueOf(map.get("newBuildSumNum"))))).subtract(new BigDecimal(String.valueOf(map.get("buildSumNum")))),2,BigDecimal.ROUND_HALF_UP).toPlainString()+"%")); | |
221 | + | |
222 | + | |
223 | + | |
224 | + for (int t = 0, len = dataList.size(); t < len; t++){ | |
225 | + map=dataList.get(t); | |
226 | + ws.addCell(new Label(7, s+1+t, String.valueOf(map.get("doctor")))); | |
227 | + ws.addCell(new Label(8, s+1+t, String.valueOf(map.get("appointmentNum")!=null?map.get("appointmentNum"):0))); | |
228 | + ws.addCell(new Label(9, s+1+t, String.valueOf(map.get("buildNum")!=null?map.get("buildNum"):0))); | |
229 | + ws.addCell(new Label(10, s+1+t, String.valueOf(map.get("newBuildNum")!=null?map.get("newBuildNum"):0))); | |
230 | + ws.addCell(new Label(11, s+1+t, String.valueOf(map.get("unBuildNum")!=null?map.get("unBuildNum"):0))); | |
231 | + ws.addCell(new Label(12, s+1+t, new BigDecimal(String.valueOf(map.get("buildNum")!=null?map.get("buildNum"):0)).multiply(new BigDecimal("100")).divide(new BigDecimal(String.valueOf(map.get("appointmentNum")!=null?map.get("appointmentNum"):0)),2,BigDecimal.ROUND_HALF_UP).toPlainString()+"%")); | |
232 | + ws.addCell(new Label(13, s+1+t,new BigDecimal(String.valueOf(map.get("newBuildNum")!=null?map.get("newBuildNum"):0)).multiply(new BigDecimal("100")).divide((new BigDecimal(String.valueOf(map.get("appointmentNum")!=null?map.get("appointmentNum"):0)).add(new BigDecimal(String.valueOf(map.get("newBuildNum")!=null?map.get("newBuildNum"):0)))).subtract(new BigDecimal(String.valueOf(map.get("buildNum")!=null?map.get("buildNum"):0))),2,BigDecimal.ROUND_HALF_UP).toPlainString()+"%")); | |
233 | + } | |
234 | + | |
235 | + ws.mergeCells(0, s+1, 0, s+dataList.size()); | |
236 | + ws.mergeCells(1, s+1, 1, s+dataList.size()); | |
237 | + ws.mergeCells(2, s+1, 2, s+dataList.size()); | |
238 | + ws.mergeCells(3, s+1, 3, s+dataList.size()); | |
239 | + ws.mergeCells(4, s+1, 4, s+dataList.size()); | |
240 | + ws.mergeCells(5, s+1, 5, s+dataList.size()); | |
241 | + ws.mergeCells(6, s+1, 6, s+dataList.size()); | |
242 | + s+=dataList.size(); | |
243 | + | |
244 | + } | |
245 | + wwb.write(); | |
246 | + wwb.close(); | |
247 | + } catch (IOException e) { | |
248 | + e.printStackTrace(); | |
249 | + } catch (RowsExceededException e) { | |
250 | + e.printStackTrace(); | |
251 | + } catch (WriteException e) { | |
252 | + e.printStackTrace(); | |
253 | + } | |
254 | + return out; | |
255 | + } | |
256 | + | |
165 | 257 | //导出时隐藏列 |
166 | 258 | public static OutputStream toExcelhideLie(OutputStream out, List<Map<String, Object>> data, Map<String, String> columName) { |
167 | 259 | WritableWorkbook wwb; |
... | ... | @@ -1186,9 +1278,8 @@ |
1186 | 1278 | } |
1187 | 1279 | |
1188 | 1280 | |
1189 | - public static void main(String[] args) { | |
1190 | - System.out.println( ExcelUtil.readExcl("F:\\美生医疗文档\\承德医院数据导入\\2023-7-2024-3-29.xls",1)); | |
1191 | - } | |
1281 | + | |
1282 | + | |
1192 | 1283 | |
1193 | 1284 | } |
platform-dal/src/main/java/com/lyms/platform/pojo/AppointmentData.java
View file @
bef39fe
... | ... | @@ -22,7 +22,7 @@ |
22 | 22 | } |
23 | 23 | |
24 | 24 | public Integer getUnBuildNum() { |
25 | - return unBuildNum; | |
25 | + return unBuildNum!=null?unBuildNum:0; | |
26 | 26 | } |
27 | 27 | |
28 | 28 | public void setUnBuildNum(Integer unBuildNum) { |
... | ... | @@ -38,7 +38,7 @@ |
38 | 38 | } |
39 | 39 | |
40 | 40 | public Integer getAppointmentNum() { |
41 | - return appointmentNum; | |
41 | + return appointmentNum!=null?appointmentNum:0; | |
42 | 42 | } |
43 | 43 | |
44 | 44 | public void setAppointmentNum(Integer appointmentNum) { |
... | ... | @@ -46,7 +46,7 @@ |
46 | 46 | } |
47 | 47 | |
48 | 48 | public Integer getBuildNum() { |
49 | - return buildNum; | |
49 | + return buildNum!=null?buildNum:0; | |
50 | 50 | } |
51 | 51 | |
52 | 52 | public void setBuildNum(Integer buildNum) { |
... | ... | @@ -54,7 +54,7 @@ |
54 | 54 | } |
55 | 55 | |
56 | 56 | public Integer getNewBuildNum() { |
57 | - return newBuildNum; | |
57 | + return newBuildNum!=null?newBuildNum:0; | |
58 | 58 | } |
59 | 59 | |
60 | 60 | public void setNewBuildNum(Integer newBuildNum) { |
platform-dal/src/main/java/com/lyms/platform/pojo/AppointmentModel.java
View file @
bef39fe
... | ... | @@ -26,6 +26,8 @@ |
26 | 26 | private Integer isBuild; |
27 | 27 | @Transient |
28 | 28 | private Date serEndTime; |
29 | + @Transient | |
30 | + private Date serStartTime; | |
29 | 31 | //服务是否到期 1为是 0为否 |
30 | 32 | @Transient |
31 | 33 | private Integer expire; |
... | ... | @@ -37,6 +39,14 @@ |
37 | 39 | private List<Map> rlevel;//高危风险颜色 |
38 | 40 | @Transient |
39 | 41 | private Integer appointmentNum;//未建档用户就诊次数 |
42 | + | |
43 | + public Date getSerStartTime() { | |
44 | + return serStartTime; | |
45 | + } | |
46 | + | |
47 | + public void setSerStartTime(Date serStartTime) { | |
48 | + this.serStartTime = serStartTime; | |
49 | + } | |
40 | 50 | |
41 | 51 | public Date getBookbuildingDate() { |
42 | 52 | return bookbuildingDate; |
platform-operate-api/src/main/java/com/lyms/hospitalapi/dtdyrm/DtdyrmFmService.java
View file @
bef39fe
... | ... | @@ -599,6 +599,7 @@ |
599 | 599 | cnames.put("就诊卡号", "就诊卡号"); |
600 | 600 | cnames.put("就诊次数", "就诊次数"); |
601 | 601 | cnames.put("姓名", "姓名"); |
602 | + cnames.put("服务开始时间", "服务开始时间"); | |
602 | 603 | cnames.put("服务截止时间", "服务截止时间"); |
603 | 604 | cnames.put("手机号", "手机号"); |
604 | 605 | cnames.put("证件号", "证件号"); |
605 | 606 | |
... | ... | @@ -656,7 +657,9 @@ |
656 | 657 | List<PatientService> patientServices = patientServiceService.queryPatientService(patientQuery); |
657 | 658 | if (com.lyms.platform.operate.web.utils.CollectionUtils.isNotEmpty(patientServices)){ |
658 | 659 | Date serEndTime= patientServices.get(0).getSerEndTime(); |
660 | + Date serStartTime=patientServices.get(0).getUpdateDate(); | |
659 | 661 | appointmentModel.setSerEndTime(serEndTime); |
662 | + appointmentModel.setSerStartTime(serStartTime); | |
660 | 663 | result.put("服务截止时间", DateUtil.gety_m_dhm(appointmentModel.getSerEndTime())); |
661 | 664 | } |
662 | 665 | }else { |
... | ... | @@ -674,6 +677,8 @@ |
674 | 677 | result.put("手机号", appointmentModel.getPhone()); |
675 | 678 | result.put("证件号", appointmentModel.getIdCard()); |
676 | 679 | result.put("出生日期",appointmentModel.getAge()); |
680 | + result.put("服务开始时间",DateUtil.gety_m_dhm(appointmentModel.getSerStartTime())); | |
681 | + result.put("服务截至时间",DateUtil.gety_m_dhm(appointmentModel.getSerEndTime())); | |
677 | 682 | result.put("建档时间",DateUtil.getYyyyMmDd(appointmentModel.getBookbuildingDate())); |
678 | 683 | result.put("就诊时间",DateUtil.gety_m_dhm(appointmentModel.getCheckTime())); |
679 | 684 | result.put("就诊医生",appointmentModel.getDoctor()); |
platform-operate-api/src/main/java/com/lyms/platform/operate/web/controller/PatientDtController.java
View file @
bef39fe
... | ... | @@ -11,10 +11,7 @@ |
11 | 11 | import com.lyms.platform.common.result.CommonResult; |
12 | 12 | import com.lyms.platform.common.utils.*; |
13 | 13 | import com.lyms.platform.operate.web.facade.*; |
14 | -import com.lyms.platform.operate.web.request.AntExAddRequest; | |
15 | -import com.lyms.platform.operate.web.request.AntExQueryRequest; | |
16 | -import com.lyms.platform.operate.web.request.AntenatalExaminationQueryRequest; | |
17 | -import com.lyms.platform.operate.web.request.PatientQueryRequest; | |
14 | +import com.lyms.platform.operate.web.request.*; | |
18 | 15 | import com.lyms.platform.operate.web.result.HighScoreResult; |
19 | 16 | import com.lyms.platform.operate.web.service.PatientWeightService; |
20 | 17 | import com.lyms.platform.operate.web.utils.CollectionUtils; |
... | ... | @@ -37,6 +34,8 @@ |
37 | 34 | import javax.servlet.http.HttpServletRequest; |
38 | 35 | import javax.servlet.http.HttpServletResponse; |
39 | 36 | import javax.validation.Valid; |
37 | +import java.io.IOException; | |
38 | +import java.io.OutputStream; | |
40 | 39 | import java.util.*; |
41 | 40 | |
42 | 41 | /** |
43 | 42 | |
44 | 43 | |
... | ... | @@ -707,11 +706,12 @@ |
707 | 706 | PatientServiceQuery patientQuery = new PatientServiceQuery(); |
708 | 707 | patientQuery.setParentid(patients.getId()); |
709 | 708 | patientQuery.setSerType(1); |
710 | - | |
711 | 709 | List<PatientService> patientServices = patientServiceService.queryPatientService(patientQuery); |
712 | 710 | if (CollectionUtils.isNotEmpty(patientServices)){ |
713 | 711 | Date serEndTime= patientServices.get(0).getSerEndTime(); |
712 | + Date serStartTime=patientServices.get(0).getUpdateDate(); | |
714 | 713 | appointmentModel.setSerEndTime(serEndTime); |
714 | + appointmentModel.setSerStartTime(serStartTime); | |
715 | 715 | if (serEndTime.compareTo(date)>0){ |
716 | 716 | appointmentModel.setExpire(0); |
717 | 717 | }else { |
718 | 718 | |
... | ... | @@ -782,7 +782,119 @@ |
782 | 782 | return baseResponse; |
783 | 783 | } |
784 | 784 | |
785 | + /** | |
786 | + * 预约统计管理科室统计列表 | |
787 | + * @param authorization | |
788 | + * @param doctor | |
789 | + * @param startTime | |
790 | + * @param endTime | |
791 | + * @return | |
792 | + */ | |
793 | + @RequestMapping(method = RequestMethod.GET, value = "/dt/appointment/dept/statistics") | |
794 | + @ResponseBody | |
795 | + public BaseResponse appointmentDeptStatistics(@RequestHeader("Authorization")String authorization, | |
796 | + @RequestParam String doctor, | |
797 | + @RequestParam String startTime, | |
798 | + @RequestParam String endTime){ | |
799 | + if (!authorization.contains(Authorization)){ | |
800 | + return new BaseObjectResponse().setErrorcode(-1).setErrormsg("权限异常"); | |
801 | + } | |
802 | + BaseResponse baseResponse=new BaseResponse(); | |
803 | + startTime=startTime+" 00:00:00"; | |
804 | + endTime=endTime+" 23:59:59"; | |
805 | + String dept=null; | |
806 | + //只有护士长和主任可以看统计(目前) | |
807 | + if (doctor.equals("田保来")||doctor.equals("孙慧洁")){ | |
808 | + dept="产科"; | |
809 | + }else { | |
810 | + return new BaseObjectResponse().setErrorcode(-1).setErrormsg("权限异常"); | |
811 | + } | |
812 | + AppointmentQuery appointmentQuery=new AppointmentQuery(); | |
813 | + appointmentQuery.setStartTime(startTime); | |
814 | + appointmentQuery.setEndTime(endTime); | |
815 | + appointmentQuery.setDept(dept); | |
816 | + List<AppointmentModel> modelList= appointmentService.queryAppointment(appointmentQuery); | |
817 | + if (CollectionUtils.isNotEmpty(modelList)){ | |
818 | + Map<String,AppointmentData> params=new HashMap(); | |
819 | + PatientsQuery patientsQuery =new PatientsQuery(); | |
820 | + patientsQuery.setYn(1); | |
821 | + patientsQuery.setHospitalId(hospitalId); | |
822 | + for (int i = 0,j=modelList.size(); i < j; i++) { | |
823 | + AppointmentModel appointmentModel= modelList.get(i); | |
824 | + String depts=appointmentModel.getDept(); | |
825 | + if (StringUtils.isNotEmpty(depts)&&StringUtils.isNotEmpty(appointmentModel.getDoctor())){ | |
826 | + AppointmentData appointmentData= params.get(depts); | |
827 | + if (appointmentData==null){ | |
828 | + appointmentData=new AppointmentData(); | |
829 | + } | |
830 | + appointmentData.setDept(depts); | |
831 | + String idCard=appointmentModel.getIdCard(); | |
832 | + String phone=appointmentModel.getPhone(); | |
833 | + String username=appointmentModel.getName(); | |
834 | + if (StringUtils.isNotEmpty(idCard)){ | |
835 | + patientsQuery.setCardNo(idCard); | |
836 | + }else { | |
837 | + if (StringUtils.isNotEmpty(username)&&StringUtils.isNotEmpty(phone)){ | |
838 | + patientsQuery.setName(username); | |
839 | + patientsQuery.setPhone(phone); | |
840 | + }else { | |
841 | + appointmentModel.setIsBuild(0); | |
842 | + //未建档 | |
843 | + appointmentData.setUnBuildNum(appointmentData.getUnBuildNum()!=null?appointmentData.getUnBuildNum()+1:1); | |
844 | + } | |
845 | + } | |
846 | + if (appointmentModel.getIsBuild()==null){ | |
847 | + List<Patients> patientsList= patientsService.queryPatient(patientsQuery); | |
848 | + if (CollectionUtils.isNotEmpty(patientsList)){ | |
849 | + //已经建档 | |
850 | + //新建档人数等于当天建档人数 | |
851 | + Patients patients= patientsList.get(0); | |
852 | + if (DateUtil.isBetween(patients.getCreated(),DateUtil.parseYMDHMS(startTime),DateUtil.parseYMDHMS(endTime))){ | |
853 | + appointmentData.setNewBuildNum(appointmentData.getNewBuildNum()!=null?appointmentData.getNewBuildNum()+1:1); | |
854 | + } | |
855 | + appointmentData.setBuildNum(appointmentData.getBuildNum()!=null?appointmentData.getBuildNum()+1:1); | |
856 | + }else { | |
857 | + //未建档 | |
858 | + appointmentData.setUnBuildNum(appointmentData.getUnBuildNum()!=null?appointmentData.getUnBuildNum()+1:1); | |
859 | + } | |
860 | + } | |
861 | + appointmentData.setAppointmentNum(appointmentData.getAppointmentNum()!=null?appointmentData.getAppointmentNum()+1:1); | |
862 | + params.put(depts,appointmentData); | |
863 | + } | |
864 | + } | |
865 | + // 使用TreeMap进行排序 | |
866 | + Map<String, AppointmentData> sortedMap = new TreeMap<>(new ChineseComparator()); | |
867 | + sortedMap.putAll(params); | |
868 | + baseResponse.setObject(sortedMap); | |
869 | + } | |
870 | + baseResponse.setErrorcode(ErrorCodeConstants.SUCCESS).setErrormsg("成功"); | |
871 | + return baseResponse; | |
872 | + } | |
873 | + // 自定义Comparator,用于按照定义好的顺序排序 | |
874 | + static class ChineseComparator implements Comparator<String> { | |
875 | + @Override | |
876 | + public int compare(String s1, String s2) { | |
877 | + try { | |
878 | + return getPinyin(s1).compareTo(getPinyin(s2)); | |
879 | + }catch (Exception e){ | |
880 | + System.out.println(s1+" "+s2); | |
881 | + } | |
882 | + return 0; | |
883 | + } | |
785 | 884 | |
885 | + } | |
886 | + private static Integer getPinyin(String s) { | |
887 | + Map<String, Integer> map = new HashMap<>(); | |
888 | + map.put("产后康复门诊", 10); | |
889 | + map.put("产科七病区", 7); | |
890 | + map.put("产科三病区", 3); | |
891 | + map.put("产科二病区", 2); | |
892 | + map.put("产科五病区", 5); | |
893 | + map.put("产科六病区", 6); | |
894 | + map.put("产科门诊", 1); | |
895 | + return map.get(s); | |
896 | + } | |
897 | + | |
786 | 898 | /** |
787 | 899 | * 预约统计管理列表 |
788 | 900 | * @param authorization |
... | ... | @@ -796,7 +908,9 @@ |
796 | 908 | public BaseResponse appointmentStatistics(@RequestHeader("Authorization")String authorization, |
797 | 909 | @RequestParam String doctor, |
798 | 910 | @RequestParam String startTime, |
799 | - @RequestParam String endTime){ | |
911 | + @RequestParam String endTime, | |
912 | + @RequestParam(required = false) String deptName | |
913 | + ){ | |
800 | 914 | if (!authorization.contains(Authorization)){ |
801 | 915 | return new BaseObjectResponse().setErrorcode(-1).setErrormsg("权限异常"); |
802 | 916 | } |
... | ... | @@ -806,7 +920,9 @@ |
806 | 920 | String dept=null; |
807 | 921 | //只有护士长和主任可以看统计(目前) |
808 | 922 | if (doctor.equals("田保来")||doctor.equals("孙慧洁")){ |
809 | - dept="产科"; | |
923 | + if (StringUtils.isEmpty(deptName)){ | |
924 | + dept="产科"; | |
925 | + } | |
810 | 926 | }else { |
811 | 927 | return new BaseObjectResponse().setErrorcode(-1).setErrormsg("权限异常"); |
812 | 928 | } |
... | ... | @@ -814,6 +930,7 @@ |
814 | 930 | appointmentQuery.setStartTime(startTime); |
815 | 931 | appointmentQuery.setEndTime(endTime); |
816 | 932 | appointmentQuery.setDept(dept); |
933 | + appointmentQuery.setDeptName(deptName); | |
817 | 934 | List<AppointmentModel> modelList= appointmentService.queryAppointment(appointmentQuery); |
818 | 935 | if (CollectionUtils.isNotEmpty(modelList)){ |
819 | 936 | Map<String,AppointmentData> params=new HashMap(); |
820 | 937 | |
... | ... | @@ -865,12 +982,125 @@ |
865 | 982 | appointmentData.setAppointmentNum(appointmentData.getAppointmentNum()!=null?appointmentData.getAppointmentNum()+1:1); |
866 | 983 | params.put(doctorName,appointmentData); |
867 | 984 | } |
868 | - | |
869 | 985 | } |
870 | 986 | baseResponse.setObject(params); |
871 | 987 | } |
872 | 988 | baseResponse.setErrorcode(ErrorCodeConstants.SUCCESS).setErrormsg("成功"); |
873 | 989 | return baseResponse; |
990 | + } | |
991 | + | |
992 | + /** | |
993 | + * 统计数据导出 | |
994 | + */ | |
995 | + @RequestMapping(method = RequestMethod.POST, value = "/dt/appointment/statistics/export") | |
996 | + @ResponseBody | |
997 | + public void statisticsExport(@RequestHeader("Authorization")String authorization, | |
998 | + @RequestBody AppointmentExport appointmentExport, | |
999 | + HttpServletResponse response){ | |
1000 | + if (authorization.contains(Authorization)){ | |
1001 | + String doctor= appointmentExport.getDoctor(); | |
1002 | + String dept=null; | |
1003 | + if (doctor.equals("田保来")||doctor.equals("孙慧洁")){ | |
1004 | + dept="产科"; | |
1005 | + }else { | |
1006 | + return; | |
1007 | + } | |
1008 | + try { | |
1009 | + Map <String, String> cnames = new LinkedHashMap <>(); | |
1010 | + cnames.put("dept", "科室"); | |
1011 | + cnames.put("appointmentSumNum", "科室预约就诊总人数"); | |
1012 | + cnames.put("buildSumNum", "科室建立电子档案总人数"); | |
1013 | + cnames.put("newBuildSumNum", "科室新建档总人数"); | |
1014 | + cnames.put("unBuildSumNum", "科室未档总人数"); | |
1015 | + cnames.put("buildSumRate", "科室已建档总比率");//已建档/总 | |
1016 | + cnames.put("newBuildSumRate", "科室新建档总比率");//新建/(总-已建档+新建档) | |
1017 | + cnames.put("doctor", "医生"); | |
1018 | + cnames.put("appointmentNum", "预约就诊人数"); | |
1019 | + cnames.put("buildNum", "建立电子档案人数"); | |
1020 | + cnames.put("newBuildNum", "新建档人数"); | |
1021 | + cnames.put("unBuildNum", "未档总人数"); | |
1022 | + cnames.put("buildRate", "已建档比率"); | |
1023 | + cnames.put("newBuildRate", "新建档比率"); | |
1024 | + response.setContentType("application/octet-stream"); | |
1025 | + response.setHeader("Content-Disposition", "attachment;fileName=" + "科室建档统计.xls"); | |
1026 | + OutputStream out = response.getOutputStream(); | |
1027 | + Map<String,Map<String,Object>> params= appointmentExport.getParams(); | |
1028 | + AppointmentQuery appointmentQuery=new AppointmentQuery(); | |
1029 | + String startTime=appointmentExport.getStartTime()+" 00:00:00"; | |
1030 | + String endTime=appointmentExport.getEndTime()+" 23:59:59"; | |
1031 | + appointmentQuery.setStartTime(startTime); | |
1032 | + appointmentQuery.setEndTime(endTime); | |
1033 | + appointmentQuery.setDept(dept); | |
1034 | + List<AppointmentModel> modelList= appointmentService.queryAppointment(appointmentQuery); | |
1035 | + if (CollectionUtils.isNotEmpty(modelList)&&!params.isEmpty()){ | |
1036 | + Map<String,List<Map<String,Object>>> data=new HashMap(); | |
1037 | + Map<String,Map<String,Object>> params1=new HashMap(); | |
1038 | + PatientsQuery patientsQuery =new PatientsQuery(); | |
1039 | + patientsQuery.setYn(1); | |
1040 | + patientsQuery.setHospitalId(hospitalId); | |
1041 | + for (int i = 0,j=modelList.size(); i < j; i++) { | |
1042 | + AppointmentModel appointmentModel= modelList.get(i); | |
1043 | + String doctorName=appointmentModel.getDoctor(); | |
1044 | + String depts=appointmentModel.getDept(); | |
1045 | + if (StringUtils.isNotEmpty(doctorName)){ | |
1046 | + Map<String,Object> appointmentData= params1.get(doctorName+","+depts); | |
1047 | + if (appointmentData==null){ | |
1048 | + appointmentData=new HashMap<>(); | |
1049 | + } | |
1050 | + appointmentData.put("doctor",doctorName); | |
1051 | + appointmentData.put("dept",depts); | |
1052 | + String idCard=appointmentModel.getIdCard(); | |
1053 | + String phone=appointmentModel.getPhone(); | |
1054 | + String username=appointmentModel.getName(); | |
1055 | + if (StringUtils.isNotEmpty(idCard)){ | |
1056 | + patientsQuery.setCardNo(idCard); | |
1057 | + }else { | |
1058 | + if (StringUtils.isNotEmpty(username)&&StringUtils.isNotEmpty(phone)){ | |
1059 | + patientsQuery.setName(username); | |
1060 | + patientsQuery.setPhone(phone); | |
1061 | + }else { | |
1062 | + appointmentModel.setIsBuild(0); | |
1063 | + //未建档 | |
1064 | + appointmentData.put("unBuildNum",appointmentData.get("unBuildNum")!=null?Integer.valueOf(String.valueOf(appointmentData.get("unBuildNum")))+1:1); | |
1065 | + } | |
1066 | + } | |
1067 | + if (appointmentModel.getIsBuild()==null){ | |
1068 | + List<Patients> patientsList= patientsService.queryPatient(patientsQuery); | |
1069 | + if (CollectionUtils.isNotEmpty(patientsList)){ | |
1070 | + //已经建档 | |
1071 | + //新建档人数等于当天建档人数 | |
1072 | + Patients patients= patientsList.get(0); | |
1073 | + if (DateUtil.isBetween(patients.getCreated(),DateUtil.parseYMDHMS(startTime),DateUtil.parseYMDHMS(endTime))){ | |
1074 | + appointmentData.put("newBuildNum",appointmentData.get("newBuildNum")!=null?Integer.valueOf(String.valueOf(appointmentData.get("newBuildNum")))+1:1); | |
1075 | + } | |
1076 | + appointmentData.put("buildNum",appointmentData.get("buildNum")!=null?Integer.valueOf(String.valueOf(appointmentData.get("buildNum")))+1:1); | |
1077 | + }else { | |
1078 | + //未建档 | |
1079 | + appointmentData.put("unBuildNum",appointmentData.get("unBuildNum")!=null?Integer.valueOf(String.valueOf(appointmentData.get("unBuildNum")))+1:1); | |
1080 | + } | |
1081 | + } | |
1082 | + appointmentData.put("appointmentNum",appointmentData.get("appointmentNum")!=null?Integer.valueOf(String.valueOf(appointmentData.get("appointmentNum")))+1:1); | |
1083 | + params1.put(doctorName+","+depts,appointmentData); | |
1084 | + } | |
1085 | + } | |
1086 | + for (Map.Entry<String,Map<String,Object>> entry: params1.entrySet()) { | |
1087 | + Map<String,Object> value= entry.getValue(); | |
1088 | + String deptName= String.valueOf(value.get("dept")); | |
1089 | + if (StringUtils.isNotEmpty(deptName)){ | |
1090 | + List<Map<String,Object>> data1 =data.get(deptName); | |
1091 | + if (CollectionUtils.isEmpty(data1)){ | |
1092 | + data1=new ArrayList<>(); | |
1093 | + } | |
1094 | + data1.add(value); | |
1095 | + data.put(deptName,data1); | |
1096 | + } | |
1097 | + } | |
1098 | + ExcelUtil.toExcelRegion(out,params ,data, cnames); | |
1099 | + } | |
1100 | + } catch (IOException e) { | |
1101 | + ExceptionUtils.catchException(e, e.getMessage()); | |
1102 | + } | |
1103 | + } | |
874 | 1104 | } |
875 | 1105 | |
876 | 1106 | /** |
platform-operate-api/src/main/java/com/lyms/platform/operate/web/request/AppointmentExport.java
View file @
bef39fe
1 | +package com.lyms.platform.operate.web.request; | |
2 | + | |
3 | + | |
4 | +import java.util.Map; | |
5 | + | |
6 | +public class AppointmentExport { | |
7 | + private Map<String, Map<String,Object>> params; | |
8 | + private String doctor; | |
9 | + private String startTime; | |
10 | + private String endTime; | |
11 | + | |
12 | + public Map<String, Map<String, Object>> getParams() { | |
13 | + return params; | |
14 | + } | |
15 | + | |
16 | + public void setParams(Map<String, Map<String, Object>> params) { | |
17 | + this.params = params; | |
18 | + } | |
19 | + | |
20 | + public String getDoctor() { | |
21 | + return doctor; | |
22 | + } | |
23 | + | |
24 | + public void setDoctor(String doctor) { | |
25 | + this.doctor = doctor; | |
26 | + } | |
27 | + | |
28 | + public String getStartTime() { | |
29 | + return startTime; | |
30 | + } | |
31 | + | |
32 | + public void setStartTime(String startTime) { | |
33 | + this.startTime = startTime; | |
34 | + } | |
35 | + | |
36 | + public String getEndTime() { | |
37 | + return endTime; | |
38 | + } | |
39 | + | |
40 | + public void setEndTime(String endTime) { | |
41 | + this.endTime = endTime; | |
42 | + } | |
43 | +} |