Commit da5a7834ac9842eca0a2ef28ecece97f2e79be41
1 parent
8f44bf38d5
Exists in
master
and in
6 other branches
产后访视统计率
Showing 2 changed files with 127 additions and 3 deletions
platform-operate-api/src/main/java/com/lyms/platform/operate/web/facade/MatDeliverFacade.java
View file @
da5a783
... | ... | @@ -41,6 +41,10 @@ |
41 | 41 | import org.springframework.beans.factory.annotation.Qualifier; |
42 | 42 | import org.springframework.data.domain.Sort; |
43 | 43 | import org.springframework.data.mongodb.core.MongoTemplate; |
44 | +import org.springframework.data.mongodb.core.aggregation.Aggregation; | |
45 | +import org.springframework.data.mongodb.core.aggregation.AggregationResults; | |
46 | +import org.springframework.data.mongodb.core.aggregation.GroupOperation; | |
47 | +import org.springframework.data.mongodb.core.aggregation.MatchOperation; | |
44 | 48 | import org.springframework.data.mongodb.core.query.Criteria; |
45 | 49 | import org.springframework.data.mongodb.core.query.Query; |
46 | 50 | import org.springframework.data.mongodb.core.query.Update; |
... | ... | @@ -49,6 +53,9 @@ |
49 | 53 | |
50 | 54 | import javax.servlet.http.HttpServletResponse; |
51 | 55 | import java.io.IOException; |
56 | +import java.math.BigDecimal; | |
57 | +import java.math.BigInteger; | |
58 | +import java.net.InetSocketAddress; | |
52 | 59 | import java.sql.Connection; |
53 | 60 | import java.sql.PreparedStatement; |
54 | 61 | import java.sql.ResultSet; |
... | ... | @@ -1885,7 +1892,7 @@ |
1885 | 1892 | matDeliverQuery.setContactReason(matdeliverFollowRequest.getContactReason()); |
1886 | 1893 | } |
1887 | 1894 | |
1888 | - matDeliverQuery.setVisitResult(matdeliverFollowRequest.getVisitResult()); | |
1895 | + | |
1889 | 1896 | matDeliverQuery.setVisitAffirm(matdeliverFollowRequest.getVisitAffirm()); |
1890 | 1897 | matDeliverQuery.setVisitStatus(matdeliverFollowRequest.getVisitStatus()); |
1891 | 1898 | matDeliverQuery.setMakeType(matdeliverFollowRequest.getMakeType()); |
... | ... | @@ -1929,6 +1936,33 @@ |
1929 | 1936 | } |
1930 | 1937 | |
1931 | 1938 | |
1939 | + Criteria criteria = matDeliverQuery.convertToQuery().getCriteria(); | |
1940 | + criteria.and("visitResult").exists(true).in(1, 2); | |
1941 | + MatchOperation match = Aggregation.match(criteria); | |
1942 | + GroupOperation group = Aggregation.group("visitResult").count().as("count"); | |
1943 | + Aggregation aggregation = Aggregation.newAggregation(match, group); | |
1944 | + AggregationResults<Map> aggregate = mongoTemplate.aggregate(aggregation, MaternalDeliverModel.class, Map.class); | |
1945 | + List<Map> mappedResults = aggregate.getMappedResults(); | |
1946 | + Integer okCount = 0, errorCount = 0, totalCount = 0; | |
1947 | + if (CollectionUtils.isNotEmpty(mappedResults)) { | |
1948 | + for (Map map : mappedResults) { | |
1949 | + Integer visitResult = Integer.parseInt(map.get("_id").toString()); | |
1950 | + Integer ok = 1; | |
1951 | + if (ok == visitResult) { | |
1952 | + okCount += Integer.parseInt(map.get("count").toString()); | |
1953 | + } | |
1954 | + if (ok != visitResult) { | |
1955 | + errorCount += Integer.parseInt(map.get("count").toString()); | |
1956 | + } | |
1957 | + } | |
1958 | + } | |
1959 | + totalCount = okCount + errorCount; | |
1960 | + double okPercentage = 0, errorPercentage = 0; | |
1961 | + if (totalCount > 0) { | |
1962 | + okPercentage = new BigDecimal(okCount.toString()).divide(new BigDecimal(totalCount.toString()), 1, BigDecimal.ROUND_HALF_UP).doubleValue() * 100; | |
1963 | + errorPercentage = 100 - okPercentage; | |
1964 | + } | |
1965 | + matDeliverQuery.setVisitResult(matdeliverFollowRequest.getVisitResult()); | |
1932 | 1966 | if (StringUtils.isNotEmpty(matdeliverFollowRequest.getNeed())) {//是否分页 |
1933 | 1967 | matDeliverQuery.setNeed("need"); |
1934 | 1968 | matDeliverQuery.setLimit(matdeliverFollowRequest.getLimit()); |
... | ... | @@ -2143,7 +2177,11 @@ |
2143 | 2177 | matdeliverFollowListResults.add(matdeliverFollowListResult); |
2144 | 2178 | } |
2145 | 2179 | listResponse.setPageInfo(matDeliverQuery.getPageInfo()); |
2146 | - listResponse.setObject(matdeliverFollowListResults); | |
2180 | + HashMap<String, Object> map = new HashMap<>(); | |
2181 | + map.put("matdeliverFollowListResults", matdeliverFollowListResults); | |
2182 | + map.put("okPercentage", okPercentage); | |
2183 | + map.put("errorPercentage", errorPercentage); | |
2184 | + listResponse.setObject(map); | |
2147 | 2185 | return listResponse; |
2148 | 2186 | } |
2149 | 2187 |
platform-operate-api/src/main/java/com/lyms/platform/operate/web/facade/MatdeliverFollowFacade.java
View file @
da5a783
... | ... | @@ -10,6 +10,7 @@ |
10 | 10 | import com.lyms.platform.common.result.BaseObjectResponse; |
11 | 11 | import com.lyms.platform.common.result.BaseResponse; |
12 | 12 | import com.lyms.platform.common.utils.DateUtil; |
13 | +import com.lyms.platform.common.utils.ExcelUtil; | |
13 | 14 | import com.lyms.platform.operate.web.request.MatDeliverFollowAddRequest; |
14 | 15 | import com.lyms.platform.operate.web.request.MatdeliverFollowRequest; |
15 | 16 | import com.lyms.platform.operate.web.result.MatdeliverFollowListResult; |
16 | 17 | |
17 | 18 | |
... | ... | @@ -26,13 +27,22 @@ |
26 | 27 | import com.lyms.platform.query.MatDeliverFollowQuery; |
27 | 28 | import com.lyms.platform.query.PersonModelQuery; |
28 | 29 | import com.lyms.platform.query.TrackDownRecordQuery; |
30 | +import jxl.Workbook; | |
31 | +import jxl.format.Alignment; | |
32 | +import jxl.format.Colour; | |
33 | +import jxl.format.UnderlineStyle; | |
34 | +import jxl.write.*; | |
35 | +import jxl.write.biff.RowsExceededException; | |
29 | 36 | import org.apache.commons.collections.MapUtils; |
30 | 37 | import org.apache.commons.lang.StringUtils; |
31 | 38 | import org.apache.log4j.Logger; |
39 | +import org.apache.poi.ss.util.CellRangeAddress; | |
32 | 40 | import org.springframework.beans.factory.annotation.Autowired; |
33 | 41 | import org.springframework.stereotype.Component; |
34 | 42 | |
35 | 43 | import javax.servlet.http.HttpServletResponse; |
44 | +import java.io.IOException; | |
45 | +import java.io.OutputStream; | |
36 | 46 | import java.util.*; |
37 | 47 | |
38 | 48 | /** |
... | ... | @@ -549,7 +559,9 @@ |
549 | 559 | |
550 | 560 | List<Map<String, Object>> results = new ArrayList<>(); |
551 | 561 | if (object != null) { |
552 | - List<MatdeliverFollowListResult> matdeliverFollowListResults = (List<MatdeliverFollowListResult>) object; | |
562 | + Map m = (Map) object; | |
563 | + Object res = m.get("matdeliverFollowListResults"); | |
564 | + List<MatdeliverFollowListResult> matdeliverFollowListResults = (List<MatdeliverFollowListResult>) res; | |
553 | 565 | |
554 | 566 | for (int i = 0; i < matdeliverFollowListResults.size(); i++) { |
555 | 567 | MatdeliverFollowListResult mf = matdeliverFollowListResults.get(i); |
556 | 568 | |
... | ... | @@ -575,7 +587,81 @@ |
575 | 587 | results.add(result); |
576 | 588 | } |
577 | 589 | } |
590 | + OutputStream out = null; | |
591 | + try { | |
592 | + out = resp.getOutputStream(); | |
593 | + resp.setContentType("application/octet-stream"); | |
594 | + resp.setCharacterEncoding("UTF-8"); | |
595 | + resp.setHeader("Content-Disposition", "attachment;fileName=data.xls"); | |
596 | + toExcel(out, results, cnames, object); | |
597 | + } catch (IOException e) { | |
598 | + e.printStackTrace(); | |
599 | + } | |
578 | 600 | ResponseUtil.responseExcel(cnames, results, resp); |
601 | + } | |
602 | + | |
603 | + public OutputStream toExcel(OutputStream out, List<Map<String, Object>> data, Map<String, String> columName, Object object) { | |
604 | + WritableWorkbook wwb; | |
605 | + try { | |
606 | + wwb = Workbook.createWorkbook(out); | |
607 | + WritableSheet ws = wwb.createSheet("sheet", 0); // 创建一个工作表 | |
608 | + /** | |
609 | + * 设置单元格样式 | |
610 | + */ | |
611 | + WritableFont wf = new WritableFont(WritableFont.ARIAL, 12, WritableFont.BOLD, false, UnderlineStyle.NO_UNDERLINE, Colour.BLACK); | |
612 | + WritableCellFormat wcf = new WritableCellFormat(wf); | |
613 | + ws.setRowView(0, 300); // 设置指定行高 | |
614 | + // 设置列宽 | |
615 | + for (int j = 0, columLen = columName.size(); j < columLen; j++) { | |
616 | + ws.setColumnView(j, 15); | |
617 | + } | |
618 | + String okPercentage = "0", errorPercentage = "0"; | |
619 | + if (object != null) { | |
620 | + Map m = (Map) object; | |
621 | + okPercentage = m.get("okPercentage").toString(); | |
622 | + errorPercentage = m.get("errorPercentage").toString(); | |
623 | + } | |
624 | + String string = "本机构的有效访视率为: %s %% 失败率为: %s %%"; | |
625 | + String format = String.format(string, okPercentage, errorPercentage); | |
626 | + | |
627 | + ws.mergeCells(0, 0, 12, 0); | |
628 | + Label label = new Label(0, 0, format, wcf); | |
629 | + WritableCellFormat cellFormat = new WritableCellFormat(); | |
630 | + cellFormat.setAlignment(Alignment.CENTRE); | |
631 | + label.setCellFormat(cellFormat); | |
632 | + ws.addCell(label); | |
633 | + // 填充数据的内容 | |
634 | + Map<String, Object> map; | |
635 | + for (int i = 1, len = data.size(); i < len; i++) { | |
636 | + map = data.get(i); | |
637 | + Iterator<String> ite = columName.keySet().iterator(); | |
638 | + int j = 0; | |
639 | + String keyORvalue = ""; | |
640 | + String keyName = ""; | |
641 | + while (ite.hasNext()) { | |
642 | + keyName = ite.next(); | |
643 | + if (i > 1) { // 类容数据 | |
644 | + keyORvalue = map.get(keyName) == null ? "" : map.get(keyName).toString(); | |
645 | + } else { // 第一行列名 | |
646 | + keyORvalue = map.get(keyName) == null ? "" : map.get(keyName).toString(); | |
647 | + keyName = columName.get(keyName); | |
648 | + ws.addCell(new Label(j, 1, keyName, wcf)); | |
649 | + } | |
650 | + ws.addCell(new Label(j, 1 + i, keyORvalue)); | |
651 | + j++; | |
652 | + } | |
653 | + } | |
654 | + | |
655 | + wwb.write(); | |
656 | + wwb.close(); | |
657 | + } catch (IOException e) { | |
658 | + e.printStackTrace(); | |
659 | + } catch (RowsExceededException e) { | |
660 | + e.printStackTrace(); | |
661 | + } catch (WriteException e) { | |
662 | + e.printStackTrace(); | |
663 | + } | |
664 | + return out; | |
579 | 665 | } |
580 | 666 | } |