From 0c2303357c00812570fa2d9a9c445c4a501911a8 Mon Sep 17 00:00:00 2001 From: wtt Date: Sat, 25 May 2019 18:22:10 +0800 Subject: [PATCH] wutaotao 20190525 excel --- .../com/lyms/platform/common/utils/ExcelUtil.java | 103 ++++++++++++++ .../web/controller/PuerperaManageController.java | 15 +- .../platform/operate/web/facade/PatientFacade.java | 157 ++++++++++++++++++++- .../web/result/HealthHandbookExcelModel.java | 18 +++ .../web/result/KeyPregnantWomenExcelModel.java | 153 ++++++++++++++++++++ platform-operate-api/src/main/resources/zddc.xls | Bin 0 -> 19968 bytes 6 files changed, 443 insertions(+), 3 deletions(-) create mode 100644 platform-operate-api/src/main/java/com/lyms/platform/operate/web/result/KeyPregnantWomenExcelModel.java create mode 100644 platform-operate-api/src/main/resources/zddc.xls diff --git a/platform-common/src/main/java/com/lyms/platform/common/utils/ExcelUtil.java b/platform-common/src/main/java/com/lyms/platform/common/utils/ExcelUtil.java index e856186..4ae4d39 100644 --- a/platform-common/src/main/java/com/lyms/platform/common/utils/ExcelUtil.java +++ b/platform-common/src/main/java/com/lyms/platform/common/utils/ExcelUtil.java @@ -250,7 +250,110 @@ public class ExcelUtil { e.printStackTrace(); } } + public static void keyPregnantWomenExclFile2(String filePath, OutputStream out, List> values) { + File file = new File(filePath); + InputStream in = null; + Workbook wb = null; + try { + in = new FileInputStream(file); + wb = Workbook.getWorkbook(in); + WorkbookSettings settings = new WorkbookSettings(); + settings.setWriteAccess(null); + WritableWorkbook book = wb.createWorkbook(out, wb, settings); + WritableSheet ws = book.getSheet(0); + + WritableFont contentFont = new WritableFont(WritableFont.ARIAL, 12, WritableFont.NO_BOLD, false, UnderlineStyle.NO_UNDERLINE, Colour.BLACK); + WritableCellFormat contentFormt = new WritableCellFormat(contentFont); + contentFormt.setAlignment(jxl.format.Alignment.CENTRE); + contentFormt.setBorder(jxl.format.Border.ALL, jxl.format.BorderLineStyle.THIN); + contentFormt.setVerticalAlignment(VerticalAlignment.CENTRE); + int arrayIndex = 0; + for (int i = 3, len = values.size() + 3; i < len; i++, arrayIndex++) { + + try { + Set sets = values.get(arrayIndex).keySet(); + int j = 0; + for (String key : sets) { + String value = values.get(arrayIndex).get(key) + ""; + if (StringUtils.isNotEmpty(value) && StringUtils.isNum(value)) { + WritableCellFormat wcfN = new WritableCellFormat(contentFont); + wcfN.setBorder(jxl.format.Border.ALL, jxl.format.BorderLineStyle.THIN); + wcfN.setAlignment(jxl.format.Alignment.CENTRE); + wcfN.setVerticalAlignment(VerticalAlignment.CENTRE); + Number labelNF = new Number(j, i, Integer.parseInt(value), wcfN); + ws.addCell(labelNF); + } else { + ws.addCell(new Label(j, i, value, contentFormt)); + } + j++; + } + } catch (Exception e) { + continue; + } + + } + + book.write(); + book.close(); + wb.close(); + } catch (Exception e) { + e.printStackTrace(); + } + } + + public static void keyPregnantWomenExclFile(String filePath, OutputStream out, List> data, Map columName) { + File file = new File(filePath); + InputStream in = null; + Workbook wb = null; + try { + in = new FileInputStream(file); + wb = Workbook.getWorkbook(in); + WorkbookSettings settings = new WorkbookSettings(); + settings.setWriteAccess(null); + WritableWorkbook book = wb.createWorkbook(out, wb, settings); + WritableSheet ws = book.getSheet(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); + } + // 填充数据的内容 + Map map; + for (int i = 0, 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 > 0) { // 类容数据 + 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, 0, keyName, wcf)); + } + ws.addCell(new Label(j, 1 + i, keyORvalue)); + j++; + } + } + + book.write(); + book.close(); + wb.close(); + + } catch (Exception e) { + e.printStackTrace(); + } + } public static void writeWhSieveExclFile(String filePath, OutputStream out, List> values, String titleName) { File file = new File(filePath); diff --git a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/controller/PuerperaManageController.java b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/controller/PuerperaManageController.java index 9ef15a4..9995010 100644 --- a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/controller/PuerperaManageController.java +++ b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/controller/PuerperaManageController.java @@ -147,10 +147,21 @@ public class PuerperaManageController extends BaseController { LoginContext loginState = (LoginContext) request.getAttribute("loginContext"); patientFacade.exportAllPuer(patientsQueryRequest,loginState.getId(),response); } - + /** + * 诸城重点孕妇登记表导出 + * @param request + * @return + */ + @RequestMapping(value = "/zcKeyPregnantWomenExcel", method = RequestMethod.GET) + @TokenRequired + public void zcKeyPregnantWomenExcel(@RequestParam(value = "ids",required = false) String ids, + HttpServletRequest request,HttpServletResponse response) { + LoginContext loginState = (LoginContext) request.getAttribute("loginContext"); + patientFacade.zcKeyPregnantWomenExcel(ids,response,loginState.getId()); + } /** - * 导出孕产妇健康管理登记表(唐山滦县) + * 导出孕产妇健康管理登记表(唐山滦县 * @param patientsQueryRequest * @param request * @return diff --git a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/facade/PatientFacade.java b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/facade/PatientFacade.java index dffeb72..3a9f279 100644 --- a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/facade/PatientFacade.java +++ b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/facade/PatientFacade.java @@ -48,6 +48,7 @@ import org.springframework.util.StopWatch; import scala.util.parsing.combinator.testing.Str; import javax.servlet.http.HttpServletResponse; +import java.io.IOException; import java.io.OutputStream; import java.util.*; import java.util.concurrent.Future; @@ -772,7 +773,16 @@ public class PatientFacade { if (end > patientses.size()) { end = patientses.size(); } - listFuture.add(commonThreadPool.submit(new QuanPatientWorker(patientses.subList(i, end), usersService, hospital, antExService, basicConfigService, patientsService, organizationService))); + listFuture.add( + commonThreadPool.submit( + new QuanPatientWorker(patientses.subList(i, end), + usersService, + hospital, + antExService, + basicConfigService, + patientsService, + organizationService)) + ); } for (Future f : listFuture) { try { @@ -1042,6 +1052,150 @@ public class PatientFacade { } } + public void zcKeyPregnantWomenExcel(String ids, HttpServletResponse response,Integer userId) { + + try { + //1 获取list数据 + List authors = Arrays.asList(ids.split(",")); + Query query = Query.query(Criteria.where("id").in(authors)); + List patientsList = mongoTemplate.find(query, Patients.class); + + String hospital = autoMatchFacade.getHospitalId(userId); + List keyPregnantWomenExcelModelList = new ArrayList<>(); + if (CollectionUtils.isNotEmpty(patientsList)) { + + for (Patients patients : patientsList) { + KeyPregnantWomenExcelModel keyPregnantWomenExcelModel = new KeyPregnantWomenExcelModel(); + BeanUtils.copy(patients, keyPregnantWomenExcelModel); + //姓名:产妇姓名 ==username + keyPregnantWomenExcelModel.setUsername(patients.getUsername()); + //年龄:产妇年龄 ==age + keyPregnantWomenExcelModel.setAge(patients.getAge()); + //户籍:本市(常住)、外地常住(暂住)、流动 ==address + keyPregnantWomenExcelModel.setAddress(patients.getAddress()); + + AntExChuModel data = antExService.findOne(patients.getId()); + //孕次:怀孕次数== 查看母子实现 + keyPregnantWomenExcelModel.setPregnancyTimes(data==null?0:(data.getPregnancyTimes()==null ? 0:data.getPregnancyTimes())); + //产次:生产次数== 查看母子实现 + keyPregnantWomenExcelModel.setProdTime(data==null?1:(data.getProdTime()==null ? 1:data.getProdTime()+1)); + //预产期:产妇预产期==dueDate + keyPregnantWomenExcelModel.setDueDate(DateUtil.getyyyy_MM_dd(patients.getDueDate())); + //居住地址:现住地址== addressRegister(孕妇居住地)addressPostRest(产后休养地) + keyPregnantWomenExcelModel.setAddressRegister(patients.getAddressRegister()); + //孕妇手机:产妇手机号==phone + keyPregnantWomenExcelModel.setPhone(patients.getPhone()); + //丈夫手机:丈夫手机号==husbandPhone + keyPregnantWomenExcelModel.setHusbandPhone(patients.getHusbandPhone()); + //重点疾病:高危因素名称 == rFactor + List factor = patients.getRiskFactorId(); + getrFactor(patients, keyPregnantWomenExcelModel, factor); + //高危等级:展示红/橙/黄/紫 (不显示绿色)==rLevel + getRiskLevelId(patients, keyPregnantWomenExcelModel); + keyPregnantWomenExcelModelList.add(keyPregnantWomenExcelModel); + } + } + List> list = new ArrayList<>(); + for (KeyPregnantWomenExcelModel keyPregnantWomenExcelModel : keyPregnantWomenExcelModelList) { + Map map = BeanUtils.objectToObjectMap(keyPregnantWomenExcelModel); + for (String key : map.keySet()) { + if (org.apache.commons.lang.StringUtils.isEmpty(String.valueOf(map.get(key)))) { + map.put(key, " "); + } + } + list.add(map); + } + //2:excel导出 +// Map header = new LinkedHashMap<>(); +// header.put(" ", "接受日期"); +// header.put(" ", "下发日期"); +// header.put(" ", "编号"); +// header.put("username", "姓名"); +// header.put("age", "年龄"); +// header.put("address", "户籍"); +// header.put("pregnancyTimes", "孕次"); +// header.put("prodTime", "产次"); +// header.put("dueDate", "预产期"); +// header.put("addressRegister", "居住地址"); +// header.put("phone", "孕妇手机"); +// header.put("husbandPhone", "丈夫手机"); +// header.put("rFactor", "重点疾病"); +// header.put("rLevel", "高危等级"); +// String date= DateUtil.getyyyy_MM_dd(new Date()); +// header.put(date.toString(),"确认时间"); +// header.put(date.toString(),"随访-第一次日期"); + response.setContentType("application/force-download"); + response.setHeader("Content-Disposition", "attachment;filename=" + new String(("重点孕妇登记表.xls").getBytes("UTF-8"), "ISO-8859-1")); +// ExcelUtil.toExcel(response.getOutputStream(), list, header); + String path = this.getClass().getResource("/").getPath() + "zddc.xls"; +// ExcelUtil.keyPregnantWomenExclFile(path, response.getOutputStream(), list,header); +// ExcelUtil.keyPregnantWomenExclFile2(path, response.getOutputStream(), list); + + ExcelUtil.writeWhExclFile(path, response.getOutputStream(), list); + /* + httpServletResponse.setContentType("application/force-download"); + httpServletResponse.setHeader("Content-Disposition", "attachment;filename=" + new String(("分娩登记表.xls").getBytes("UTF-8"), "ISO-8859-1")); + ExcelUtil.writeWhExclFile(path, httpServletResponse.getOutputStream(), list); + */ + } catch (IOException e) { + ExceptionUtils.catchException(e, e.getMessage()); } + } + + private void getRiskLevelId(Patients patients, KeyPregnantWomenExcelModel keyPregnantWomenExcelModel) { + List level = new ArrayList(); + if (org.apache.commons.lang.StringUtils.isNotEmpty(patients.getRiskLevelId())) { + try { + List list = JsonUtil.jkstr2Obj(patients.getRiskLevelId(), List.class); + for (String str : list) { + BasicConfig basicConfig = basicConfigService.getOneBasicConfigById(str); + if (null != basicConfig) { + Map map = new HashMap(); + basicConfig.replenRisk(map); + // String name = basicConfig.getName(); + // if (name.indexOf("预警") > -1) { + // name = name.replace("预警", ""); + // } + // map.put("name", name); + // map.put("color", "risk_" + RiskDefaultTypeEnum.getColor(name)); + level.add(map); + } + } + } catch (Exception e) { + ExceptionUtils.catchException(e, "patients.getRiskLevelId error."); + } + keyPregnantWomenExcelModel.setrLevel(getLevel(HighScoreResult.filter(level))); + } + } + + private void getrFactor(Patients patients, KeyPregnantWomenExcelModel keyPregnantWomenExcelModel, List factor) { + if (CollectionUtils.isNotEmpty(factor)) { + StringBuilder sb = new StringBuilder(56); + for (String srt : factor) { + if (org.apache.commons.lang.StringUtils.isNotEmpty(srt)) { + BasicConfig basicConfig = basicConfigService.getOneBasicConfigById(srt); + if (null != basicConfig && sb.indexOf(basicConfig.getName()) == -1) { + sb.append(basicConfig.getName()).append(','); + } + } + } + if (sb.toString().endsWith(",")) { + keyPregnantWomenExcelModel.setrFactor(sb.substring(0, sb.length() - 1)); + } else { + keyPregnantWomenExcelModel.setrFactor(sb.toString()); + } + + if (!"-".equals(keyPregnantWomenExcelModel.getrFactor()) && org.apache.commons.lang.StringUtils.isNotEmpty(patients.getoRiskFactor())) { + keyPregnantWomenExcelModel.setrFactor(keyPregnantWomenExcelModel.getrFactor()+","+patients.getoRiskFactor()); + }else if (org.apache.commons.lang.StringUtils.isNotEmpty(patients.getoRiskFactor())) + { + keyPregnantWomenExcelModel.setrFactor(patients.getoRiskFactor()); + } + } + else if (org.apache.commons.lang.StringUtils.isNotEmpty(patients.getoRiskFactor())) + { + keyPregnantWomenExcelModel.setrFactor(patients.getoRiskFactor()); + } + } /** * 唐山(滦县)需求导出孕产妇健康管理登记表 @@ -1524,4 +1678,5 @@ public class PatientFacade { return new BaseObjectResponse().setData(patientBaseResult).setErrormsg("成功").setErrorcode(ErrorCodeConstants.SUCCESS); } + } diff --git a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/result/HealthHandbookExcelModel.java b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/result/HealthHandbookExcelModel.java index df007c4..89f29ac 100644 --- a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/result/HealthHandbookExcelModel.java +++ b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/result/HealthHandbookExcelModel.java @@ -5,6 +5,24 @@ package com.lyms.platform.operate.web.result; * @discription Excel导出实体类 */ public class HealthHandbookExcelModel { + @Override + public String toString() { + return "HealthHandbookExcelModel{" + + "username='" + username + '\'' + + ", cardNo='" + cardNo + '\'' + + ", husbandName='" + husbandName + '\'' + + ", organization='" + organization + '\'' + + ", address='" + address + '\'' + + ", childTime=" + childTime + + ", gestation='" + gestation + '\'' + + ", bookbuildingDate='" + bookbuildingDate + '\'' + + ", serial='" + serial + '\'' + + ", issuer='" + issuer + '\'' + + ", reissue1='" + reissue1 + '\'' + + ", reissue2='" + reissue2 + '\'' + + ", reissue3='" + reissue3 + '\'' + + '}'; + } /** *女方姓名:孕妇姓名 diff --git a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/result/KeyPregnantWomenExcelModel.java b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/result/KeyPregnantWomenExcelModel.java new file mode 100644 index 0000000..e25ecce --- /dev/null +++ b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/result/KeyPregnantWomenExcelModel.java @@ -0,0 +1,153 @@ +package com.lyms.platform.operate.web.result; + +import org.springframework.data.mongodb.core.mapping.Document; + +/** + * @auther wtt + * @discription Excel导出实体类 + */ +@Document(collection="lyms_patient") +public class KeyPregnantWomenExcelModel { + + + /** + *姓名:产妇姓名 + */ + private String username; + + /* + 年龄:产妇年龄 ==age + */ + private Integer age; + + /** + *户籍:本市(常住)、外地常住(暂住)、流动 ==address + */ + private String address; + + + + /* + 孕次:怀孕次数== 查看母子实现 + */ + private Integer pregnancyTimes; + /* + 产次:生产次数== 查看母子实现(对象中有) + */ + private Integer prodTime; + /* + 预产期:产妇预产期==dueDate + */ + private String dueDate; + /* + 居住地址:现住地址== addressRegister(孕妇居住地)addressPostRest(产后休养地) + */ + private String addressRegister; + /* + 孕妇手机:产妇手机号==phone + */ + private String phone; + /* + 丈夫手机:丈夫手机号==husbandPhone + */ + private String husbandPhone; + /* + 重点疾病:高危因素名称 == rFactor + */ + private String rFactor; + /* + 高危等级:展示红/橙/黄/紫 (不显示绿色)==rLevel + */ + private String rLevel; + + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + + public Integer getAge() { + return age; + } + + public void setAge(Integer age) { + this.age = age; + } + + public String getAddress() { + return address; + } + + public void setAddress(String address) { + this.address = address; + } + + + + + public Integer getPregnancyTimes() { + return pregnancyTimes; + } + + public void setPregnancyTimes(Integer pregnancyTimes) { + this.pregnancyTimes = pregnancyTimes; + } + + public Integer getProdTime() { + return prodTime; + } + + public void setProdTime(Integer prodTime) { + this.prodTime = prodTime; + } + + public String getDueDate() { + return dueDate; + } + + public void setDueDate(String dueDate) { + this.dueDate = dueDate; + } + + public String getAddressRegister() { + return addressRegister; + } + + public void setAddressRegister(String addressRegister) { + this.addressRegister = addressRegister; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + + public String getHusbandPhone() { + return husbandPhone; + } + + public void setHusbandPhone(String husbandPhone) { + this.husbandPhone = husbandPhone; + } + + public String getrFactor() { + return rFactor; + } + + public void setrFactor(String rFactor) { + this.rFactor = rFactor; + } + + public String getrLevel() { + return rLevel; + } + + public void setrLevel(String rLevel) { + this.rLevel = rLevel; + } +} diff --git a/platform-operate-api/src/main/resources/zddc.xls b/platform-operate-api/src/main/resources/zddc.xls new file mode 100644 index 0000000000000000000000000000000000000000..9b5a67b8982103ec8622ce37e7a4a072fc5fc6a8 GIT binary patch literal 19968 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 PsV{{^Fa9U|CoS-Ai5#m3 literal 0 HcmV?d00001 -- 1.8.3.1