From da5a7834ac9842eca0a2ef28ecece97f2e79be41 Mon Sep 17 00:00:00 2001 From: dongqin <123456> Date: Wed, 10 Jul 2019 11:53:00 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BA=A7=E5=90=8E=E8=AE=BF=E8=A7=86=E7=BB=9F?= =?UTF-8?q?=E8=AE=A1=E7=8E=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../operate/web/facade/MatDeliverFacade.java | 42 ++++++++++- .../operate/web/facade/MatdeliverFollowFacade.java | 88 +++++++++++++++++++++- 2 files changed, 127 insertions(+), 3 deletions(-) diff --git a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/facade/MatDeliverFacade.java b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/facade/MatDeliverFacade.java index 9e1462d..560a0d6 100644 --- a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/facade/MatDeliverFacade.java +++ b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/facade/MatDeliverFacade.java @@ -41,6 +41,10 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.data.domain.Sort; import org.springframework.data.mongodb.core.MongoTemplate; +import org.springframework.data.mongodb.core.aggregation.Aggregation; +import org.springframework.data.mongodb.core.aggregation.AggregationResults; +import org.springframework.data.mongodb.core.aggregation.GroupOperation; +import org.springframework.data.mongodb.core.aggregation.MatchOperation; import org.springframework.data.mongodb.core.query.Criteria; import org.springframework.data.mongodb.core.query.Query; import org.springframework.data.mongodb.core.query.Update; @@ -49,6 +53,9 @@ import org.springframework.stereotype.Component; import javax.servlet.http.HttpServletResponse; import java.io.IOException; +import java.math.BigDecimal; +import java.math.BigInteger; +import java.net.InetSocketAddress; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; @@ -1885,7 +1892,7 @@ public class MatDeliverFacade { matDeliverQuery.setContactReason(matdeliverFollowRequest.getContactReason()); } - matDeliverQuery.setVisitResult(matdeliverFollowRequest.getVisitResult()); + matDeliverQuery.setVisitAffirm(matdeliverFollowRequest.getVisitAffirm()); matDeliverQuery.setVisitStatus(matdeliverFollowRequest.getVisitStatus()); matDeliverQuery.setMakeType(matdeliverFollowRequest.getMakeType()); @@ -1929,6 +1936,33 @@ public class MatDeliverFacade { } + Criteria criteria = matDeliverQuery.convertToQuery().getCriteria(); + criteria.and("visitResult").exists(true).in(1, 2); + MatchOperation match = Aggregation.match(criteria); + GroupOperation group = Aggregation.group("visitResult").count().as("count"); + Aggregation aggregation = Aggregation.newAggregation(match, group); + AggregationResults aggregate = mongoTemplate.aggregate(aggregation, MaternalDeliverModel.class, Map.class); + List mappedResults = aggregate.getMappedResults(); + Integer okCount = 0, errorCount = 0, totalCount = 0; + if (CollectionUtils.isNotEmpty(mappedResults)) { + for (Map map : mappedResults) { + Integer visitResult = Integer.parseInt(map.get("_id").toString()); + Integer ok = 1; + if (ok == visitResult) { + okCount += Integer.parseInt(map.get("count").toString()); + } + if (ok != visitResult) { + errorCount += Integer.parseInt(map.get("count").toString()); + } + } + } + totalCount = okCount + errorCount; + double okPercentage = 0, errorPercentage = 0; + if (totalCount > 0) { + okPercentage = new BigDecimal(okCount.toString()).divide(new BigDecimal(totalCount.toString()), 1, BigDecimal.ROUND_HALF_UP).doubleValue() * 100; + errorPercentage = 100 - okPercentage; + } + matDeliverQuery.setVisitResult(matdeliverFollowRequest.getVisitResult()); if (StringUtils.isNotEmpty(matdeliverFollowRequest.getNeed())) {//是否分页 matDeliverQuery.setNeed("need"); matDeliverQuery.setLimit(matdeliverFollowRequest.getLimit()); @@ -2143,7 +2177,11 @@ public class MatDeliverFacade { matdeliverFollowListResults.add(matdeliverFollowListResult); } listResponse.setPageInfo(matDeliverQuery.getPageInfo()); - listResponse.setObject(matdeliverFollowListResults); + HashMap map = new HashMap<>(); + map.put("matdeliverFollowListResults", matdeliverFollowListResults); + map.put("okPercentage", okPercentage); + map.put("errorPercentage", errorPercentage); + listResponse.setObject(map); return listResponse; } diff --git a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/facade/MatdeliverFollowFacade.java b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/facade/MatdeliverFollowFacade.java index e665960..e227d88 100644 --- a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/facade/MatdeliverFollowFacade.java +++ b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/facade/MatdeliverFollowFacade.java @@ -10,6 +10,7 @@ import com.lyms.platform.common.result.BaseListResponse; import com.lyms.platform.common.result.BaseObjectResponse; import com.lyms.platform.common.result.BaseResponse; import com.lyms.platform.common.utils.DateUtil; +import com.lyms.platform.common.utils.ExcelUtil; import com.lyms.platform.operate.web.request.MatDeliverFollowAddRequest; import com.lyms.platform.operate.web.request.MatdeliverFollowRequest; import com.lyms.platform.operate.web.result.MatdeliverFollowListResult; @@ -26,13 +27,22 @@ import com.lyms.platform.pojo.*; import com.lyms.platform.query.MatDeliverFollowQuery; import com.lyms.platform.query.PersonModelQuery; import com.lyms.platform.query.TrackDownRecordQuery; +import jxl.Workbook; +import jxl.format.Alignment; +import jxl.format.Colour; +import jxl.format.UnderlineStyle; +import jxl.write.*; +import jxl.write.biff.RowsExceededException; import org.apache.commons.collections.MapUtils; import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; +import org.apache.poi.ss.util.CellRangeAddress; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.io.OutputStream; import java.util.*; /** @@ -549,7 +559,9 @@ public class MatdeliverFollowFacade { List> results = new ArrayList<>(); if (object != null) { - List matdeliverFollowListResults = (List) object; + Map m = (Map) object; + Object res = m.get("matdeliverFollowListResults"); + List matdeliverFollowListResults = (List) res; for (int i = 0; i < matdeliverFollowListResults.size(); i++) { MatdeliverFollowListResult mf = matdeliverFollowListResults.get(i); @@ -575,6 +587,80 @@ public class MatdeliverFollowFacade { results.add(result); } } + OutputStream out = null; + try { + out = resp.getOutputStream(); + resp.setContentType("application/octet-stream"); + resp.setCharacterEncoding("UTF-8"); + resp.setHeader("Content-Disposition", "attachment;fileName=data.xls"); + toExcel(out, results, cnames, object); + } catch (IOException e) { + e.printStackTrace(); + } ResponseUtil.responseExcel(cnames, results, resp); } + + public OutputStream toExcel(OutputStream out, List> data, Map columName, Object object) { + WritableWorkbook wwb; + try { + wwb = Workbook.createWorkbook(out); + WritableSheet ws = wwb.createSheet("sheet", 0); // 创建一个工作表 + /** + * 设置单元格样式 + */ + WritableFont wf = new WritableFont(WritableFont.ARIAL, 12, WritableFont.BOLD, false, UnderlineStyle.NO_UNDERLINE, Colour.BLACK); + WritableCellFormat wcf = new WritableCellFormat(wf); + ws.setRowView(0, 300); // 设置指定行高 + // 设置列宽 + for (int j = 0, columLen = columName.size(); j < columLen; j++) { + ws.setColumnView(j, 15); + } + String okPercentage = "0", errorPercentage = "0"; + if (object != null) { + Map m = (Map) object; + okPercentage = m.get("okPercentage").toString(); + errorPercentage = m.get("errorPercentage").toString(); + } + String string = "本机构的有效访视率为: %s %% 失败率为: %s %%"; + String format = String.format(string, okPercentage, errorPercentage); + + ws.mergeCells(0, 0, 12, 0); + Label label = new Label(0, 0, format, wcf); + WritableCellFormat cellFormat = new WritableCellFormat(); + cellFormat.setAlignment(Alignment.CENTRE); + label.setCellFormat(cellFormat); + ws.addCell(label); + // 填充数据的内容 + Map map; + for (int i = 1, len = data.size(); i < len; i++) { + map = data.get(i); + Iterator ite = columName.keySet().iterator(); + int j = 0; + String keyORvalue = ""; + String keyName = ""; + while (ite.hasNext()) { + keyName = ite.next(); + if (i > 1) { // 类容数据 + keyORvalue = map.get(keyName) == null ? "" : map.get(keyName).toString(); + } else { // 第一行列名 + keyORvalue = map.get(keyName) == null ? "" : map.get(keyName).toString(); + keyName = columName.get(keyName); + ws.addCell(new Label(j, 1, keyName, wcf)); + } + ws.addCell(new Label(j, 1 + i, keyORvalue)); + j++; + } + } + + wwb.write(); + wwb.close(); + } catch (IOException e) { + e.printStackTrace(); + } catch (RowsExceededException e) { + e.printStackTrace(); + } catch (WriteException e) { + e.printStackTrace(); + } + return out; + } } -- 1.8.3.1