From eeb22f00d5683e7e746bac7dba3bfc048ade37a0 Mon Sep 17 00:00:00 2001 From: wtt Date: Wed, 24 Jun 2020 16:30:04 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A8=81=E6=B5=B7=E9=AB=98=E5=8D=B1=E7=BB=9F?= =?UTF-8?q?=E8=AE=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/lyms/platform/query/AntExRecordQuery.java | 16 ++ .../controller/AntenatalExaminationController.java | 6 +- .../operate/web/facade/AntExRecordFacade.java | 266 +++++++++++++++++---- .../operate/web/facade/HosptialHighRiskFacade.java | 8 + .../operate/web/result/RiskStatisticsResult.java | 51 ++++ 5 files changed, 297 insertions(+), 50 deletions(-) create mode 100644 platform-operate-api/src/main/java/com/lyms/platform/operate/web/result/RiskStatisticsResult.java diff --git a/platform-dal/src/main/java/com/lyms/platform/query/AntExRecordQuery.java b/platform-dal/src/main/java/com/lyms/platform/query/AntExRecordQuery.java index 6a431c2..389817a 100644 --- a/platform-dal/src/main/java/com/lyms/platform/query/AntExRecordQuery.java +++ b/platform-dal/src/main/java/com/lyms/platform/query/AntExRecordQuery.java @@ -356,6 +356,7 @@ public class AntExRecordQuery extends BaseQuery implements IConvertToNativeQuery private Date checkTimeStart; private Date checkTimeEnd; private Date checkTimeLt; + private Date createdlt; private Date dueDateStart; private Date dueDateEnd; @@ -392,6 +393,14 @@ public class AntExRecordQuery extends BaseQuery implements IConvertToNativeQuery this.checkTimeEnd = checkTimeEnd; } + public Date getCreatedlt() { + return createdlt; + } + + public void setCreatedlt(Date createdlt) { + this.createdlt = createdlt; + } + public List getHospitalList() { return hospitalList; } @@ -724,6 +733,13 @@ public class AntExRecordQuery extends BaseQuery implements IConvertToNativeQuery c = Criteria.where("checkTime").lt(checkTimeLt); } } + if (null != createdlt) { + if (null != c) { + c = c.lt(createdlt); + } else { + c = Criteria.where("created").lt(createdlt); + } + } if (null != lastMensesStart) { if (null != c) { diff --git a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/controller/AntenatalExaminationController.java b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/controller/AntenatalExaminationController.java index c049b15..cb0d8d6 100644 --- a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/controller/AntenatalExaminationController.java +++ b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/controller/AntenatalExaminationController.java @@ -270,16 +270,16 @@ public class AntenatalExaminationController extends BaseController { } /** - * 功能描述 + * 功能描述 威海高危统计 * @author 武涛涛 * @date 2020/6/4 */ @RequestMapping(method = RequestMethod.GET, value = "/antex/findStatisticalRisk") @ResponseBody @TokenRequired - public BaseResponse findStatisticalRisk(@Valid AntExManagerQueryRequest antExManagerQueryRequest, HttpServletRequest request) { + public void findStatisticalRisk(@Valid AntExManagerQueryRequest antExManagerQueryRequest, HttpServletRequest request, HttpServletResponse response) { LoginContext loginState = (LoginContext) request.getAttribute("loginContext"); - return antExRecordFacade.findStatisticalRisk(antExManagerQueryRequest, loginState.getId(), false, "true"); + antExRecordFacade.findStatisticalRisk(antExManagerQueryRequest, loginState.getId(), false, "true", response); } diff --git a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/facade/AntExRecordFacade.java b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/facade/AntExRecordFacade.java index 57f7056..dd110fe 100644 --- a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/facade/AntExRecordFacade.java +++ b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/facade/AntExRecordFacade.java @@ -12,10 +12,11 @@ import com.lyms.platform.operate.web.request.AntExAddRequest; import com.lyms.platform.operate.web.request.AntExManagerQueryRequest; import com.lyms.platform.operate.web.request.CjStatisticsQueryRequest; import com.lyms.platform.operate.web.request.NutritionInfoRequest; -import com.lyms.platform.operate.web.result.AntExManagerResult; -import com.lyms.platform.operate.web.result.CjStatisticsListResult; -import com.lyms.platform.operate.web.result.CjStatisticsResult; -import com.lyms.platform.operate.web.result.HighScoreResult; +import com.lyms.platform.operate.web.result.*; +import com.lyms.platform.operate.web.utils.FunvCommonUtil; +import com.lyms.platform.operate.web.utils.ResolveUtils; +import com.lyms.platform.operate.web.utils.UnitConstants; +import com.lyms.platform.operate.web.utils.UnitUtils; import com.lyms.platform.operate.web.worker.AntExRecordWorker; import com.lyms.platform.permission.model.Organization; import com.lyms.platform.permission.model.OrganizationQuery; @@ -66,6 +67,8 @@ public class AntExRecordFacade { @Autowired private BasicConfigService basicConfigService; @Autowired + private HosptialHighRiskService hosptialHighRiskService; + @Autowired private CommonService commonService; @Autowired private AntenatalExaminationService antExService; @@ -357,107 +360,276 @@ public class AntExRecordFacade { /** * 功能描述 威海妇幼统计各个高危总数,及初诊复诊各个高危总数 - * 这几个场景都没问题 110101199003074960 110101199003071102 测试了1 初诊 复诊 复诊, 2 初诊 复诊 3 复诊 复诊 复诊 场景 - * - * 缺少 初诊复诊分别统计,级别统计,和补充高危统计。 * * @return * @author 武涛涛 * @date 2020/6/4 - * // * @param 参数说明antExManagerQueryRequest.cTime产检时间, userId 当前用户id , isRegion false,isPage "false", + //@param 参数说明antExManagerQueryRequest.cTime产检时间, userId 当前用户id , isRegion false,isPage "false", */ - public BaseResponse findStatisticalRisk(AntExManagerQueryRequest antExManagerQueryRequest, Integer userId, boolean isRegion, String isPage) { - List incrHrisk = null;//存储高危id + public BaseResponse findStatisticalRisk(AntExManagerQueryRequest antExManagerQueryRequest, Integer userId, boolean isRegion, String isPage,HttpServletResponse response) { + List incrHrisk = null;//高危因素 list AntExRecordQuery antExRecordQuery = null; try { incrHrisk = new ArrayList(); antExRecordQuery = complayRequest(userId, antExManagerQueryRequest, isRegion, isPage); + antExRecordQuery.setCardNo(antExManagerQueryRequest.getCardNo()); String hospital = autoMatchFacade.getHospitalId(userId); antExRecordQuery.setHospitalId(hospital); + //antExRecordQuery.setType(1);//???? List antExRecordModelList = recordService.queryAntExRecords(antExRecordQuery, Sort.Direction.DESC, "created"); - System.out.println("1------获取产检条数------" + antExRecordModelList.size()); + System.out.println("1 获取这段时间的产检条数------" + antExRecordModelList.size()); Map> map = handleAntexRecord2(antExRecordModelList); - System.out.println("2-----获取产检孕妇人数-------" + map.size()); + System.out.println("2 将产检内容按照人存储,一个人可以多条-------" + map.size()); if (map != null && map.size() > 0) { + int conut = 0; + String name = null; + String carno = null; Iterator>> iterator = map.entrySet().iterator(); while (iterator.hasNext()) { + boolean czb = true; Map.Entry> next = iterator.next(); + //个人产检list List valueList = next.getValue(); + if (CollectionUtils.isNotEmpty(valueList)) { ListSort(valueList);//升序 - System.out.println("3---获取单个孕妇产检数--1111---" + valueList.size()); - //获取个人第一个产检,判断是否为复诊 + System.out.println("3 单个孕妇产检数总数1---" + valueList.size()); AntExRecordModel antExRecordModel = valueList.get(0); - if (antExRecordModel != null && antExRecordModel.getType() != null && antExRecordModel.getType() == 1) { //1 复诊 2 初诊 - //复诊就查询上一次产检信息 + name = antExRecordModel.getName(); + carno = antExRecordModel.getCardNo(); + //1 产检信息升序,判断第一个是否为复诊,复诊就查询上一次产检信息 + if (antExRecordModel != null && antExRecordModel.getType() != null && antExRecordModel.getType() == 1) {//(1 复诊 2 初诊) AntExRecordQuery beforeRecordQuery = new AntExRecordQuery(); beforeRecordQuery.setParentId(antExRecordModel.getParentId()); - beforeRecordQuery.setCheckTimeEnd(antExRecordModel.getCheckTime()); - //beforeRecordQuery.setNeqId(antExRecordModel.getId()); //模拟多条数据时候观察一下 - List beforeAntRecords = recordService.queryAntExRecords(beforeRecordQuery); + beforeRecordQuery.setCheckTimeLt(antExRecordModel.getCheckTime()); + List beforeAntRecords = recordService.queryAntExRecords(beforeRecordQuery, Sort.Direction.DESC, "created"); + //如果复诊前面直接是初诊就存在复诊初诊使用检查时间问题,需要修改查询时间 + if(CollectionUtils.isEmpty(beforeAntRecords)){ + AntExRecordQuery beforeRecordQuery1 = new AntExRecordQuery(); + beforeRecordQuery1.setParentId(antExRecordModel.getParentId()); + beforeRecordQuery1.setCreatedlt(antExRecordModel.getCreated()); + beforeAntRecords = recordService.queryAntExRecords(beforeRecordQuery1, Sort.Direction.DESC, "created"); + + } + //将复诊上一次产检记录中,添加到个人产检list if (CollectionUtils.isNotEmpty(beforeAntRecords)) { AntExRecordModel antExRecordModel1 = beforeAntRecords.get(0); - //将产检信息添加到这个人产检记录中 - valueList.add(antExRecordModel1);// + valueList.add(antExRecordModel1); + czb = false;//复诊上面是初诊,下面比对新增高危时候就不直接添加上这个初诊了 } } - - System.out.println("4----获取单个孕妇产检数--2222----" + valueList.size()); + System.out.println("4 单个孕妇产检数总数2---" + valueList.size()); ListSort(valueList); - //个人产检信息,统计高危 valueList - //遍历个人产检list + //遍历个人产检记录list,获取产检高危因素、其它高危,剔除健康高危 for (int i = 0; i < valueList.size(); i++) { - //获取第一条 + List beforeRiskList = new ArrayList(); + //获取第一条产检记录 AntExRecordModel antExRecordModel1 = valueList.get(i); - if (antExRecordModel1.gethRisk() == null && !antExRecordModel1.gethRisk().contains("d42eec03-aa86-45b8-a4e0-78a0ff365fb6")) { - continue; - } - List beforeRiskList = antExRecordModel1.gethRisk(); - - //这段时间一个孕妇一条初诊产检直接保存跳出 - if(antExRecordModel1.getType()==2){ + //根据产检记录分别获取,初诊复诊对应的其它高危。 + getCzFzGwMth(beforeRiskList, antExRecordModel1); + //beforeRiskList = antExRecordModel1.gethRisk(); //不在使用产检记录中的高危因素 + //人产检list只有一条初诊产检直接保存跳出 + if(antExRecordModel1.getType()==2 && czb){ incrHrisk.addAll(beforeRiskList); + conut = beforeRiskList.size(); if(valueList.size() == 1){ break; } } //初诊和复诊,复诊和复诊比对避免超出坐标 - if((i + 1) >= valueList.size()){ - break; - } + if((i + 1) >= valueList.size()){break; } + //获取第二条进行比对 - List currentRiskList = valueList.get(i + 1).gethRisk(); + List currentRiskList = new ArrayList(); + getCzFzGwMth(currentRiskList, valueList.get(i + 1)); for (Object riskId : currentRiskList) { if (!beforeRiskList.contains(riskId)) { incrHrisk.add(String.valueOf(riskId)); + conut ++; } } - //不在比对孕妇最后一条 - if((i + 2) == valueList.size()){ - break; - } + //人产检list最后一条不用比对 + if((i + 2) == valueList.size()){break;} + } + } + } + System.out.println("5 孕妇:"+ name +"身份证:"+ carno + ",高危添加总数---" + conut); //现在统计个数完全正确$$$$ + List riskStatisticsResults = new ArrayList<>(); + for (String bcid: incrHrisk ) { + if(bcid.contains("###")){ + RiskStatisticsResult rsr = new RiskStatisticsResult(); + /* if(bcid.contains("###czgw@")){ + rsr.setFuzChz("复诊"); + }else if(bcid.contains("###fzgw@")){ + rsr.setFuzChz("初诊"); + } + bcid = bcid.substring(8,bcid.length());*/ + bcid = bcid.substring(3,bcid.length()); + HosptialHighRisk hosptialHighRisk = hosptialHighRiskService.getOneHosptialHighRiskById(bcid); + if(hosptialHighRisk !=null){ + String colorCode = HosptialHighRiskFacade.colorMap.get(hosptialHighRisk.getColor()); + hosptialHighRisk.setColorName(HosptialHighRiskFacade.colorNameMap.get(colorCode)); + rsr.setId(hosptialHighRisk.getId()); + rsr.setName(hosptialHighRisk.getName()); + rsr.setColor(hosptialHighRisk.getColorName()); + } + riskStatisticsResults.add(rsr); + System.out.println(rsr.toString()); + }else { + RiskStatisticsResult rsr = new RiskStatisticsResult(); + /*if(bcid.contains("fzgw@")){ + rsr.setFuzChz("复诊"); + }else if(bcid.contains("czgw@")){ + rsr.setFuzChz("初诊"); } + bcid = bcid.substring(5,bcid.length()); + */ + BasicConfig basicConfig = basicConfigService.getOneBasicConfigById(bcid); + if(basicConfig !=null){ + rsr.setId(basicConfig.getId()); + rsr.setName(basicConfig.getName()); + String colorCode = HosptialHighRiskFacade.colorMap.get(basicConfig.getParentId()); + rsr.setColor(HosptialHighRiskFacade.colorNameMap.get(colorCode)); + } + riskStatisticsResults.add(rsr); + System.out.println(rsr.toString()); + } + } - System.out.println("5-----高危因素id集合-----"+incrHrisk.size()); - /*BasicConfigQuery basicConfigQuery = new BasicConfigQuery(); - basicConfigQuery.setId(id); - List riskConfig = basicConfigService.queryBasicConfig(basicConfigQuery); - map.put("Name", riskConfig.get(0).getName()); - map.put("cardNo", recordModel.getCardNo());*/ + System.out.println("6 获取高危实体---- "+riskStatisticsResults.size()); + List> datas = new ArrayList<>(); + if (CollectionUtils.isNotEmpty(riskStatisticsResults)) { + for (RiskStatisticsResult rsr : riskStatisticsResults) { + Map data = new HashMap<>(); + + data.put("高危因素", rsr.getName()); + data.put("高危等级", rsr.getColor()); + datas.add(data); + } + } + OutputStream out = response.getOutputStream(); + Map cnames = new LinkedHashMap<>(); + cnames.put("高危因素", "高危因素"); + cnames.put("高危等级", "高危等级"); + response.setContentType("application/octet-stream"); + response.setCharacterEncoding("UTF-8"); + response.setHeader("Content-Disposition", "attachment;fileName=" + "威海高危统计.xls"); + ExcelUtil.toExcel(out, datas, cnames); } } catch (Exception e) { e.printStackTrace(); + ExceptionUtils.catchException(e, "产筛导出异常"); } return new BaseListResponse().setData(incrHrisk).setErrorcode(ErrorCodeConstants.SUCCESS).setErrormsg("成功").setPageInfo(antExRecordQuery.getPageInfo()); } + private void getCzFzGwMth(List beforeRiskList, AntExRecordModel antExRecordModel1) { + if(StringUtils.isNotEmpty(antExRecordModel1.getfId()) && antExRecordModel1.getType()==2){ + AntExChuModel data = antExService.findOne(antExRecordModel1.getfId()); + //初诊使用产检中的高危因素 + if (data!=null && StringUtils.isNotEmpty(data.getHighrisk()) && !"{}".equals(data.getHighrisk()) && !"[]".equals(data.getHighrisk())) { + //System.out.println(data.getHighrisk()); + List> listOtherRisk = new ArrayList<>(); + if (data.getHighrisk().startsWith("[") && data.getHighrisk().endsWith("]")) { + List list2 = JsonUtil.toList(data.getHighrisk(), String.class); + /*for (String czgw : list2) { + beforeRiskList.add("czgw@"+czgw); + }*/ + beforeRiskList.addAll(list2); + } + } + //初诊添加其它高危 + if (data!=null && StringUtils.isNotEmpty(data.getOtherHighRisk()) && !"{}".equals(data.getOtherHighRisk()) && !"[]".equals(data.getOtherHighRisk())) { + //System.out.println(data.getOtherHighRisk()); + List> listOtherRisk = new ArrayList<>(); + ResolveUtils.queryOtherRisk(data.getOtherHighRisk(), listOtherRisk); + for (Map mapo: listOtherRisk) { + if(!mapo.containsKey("otherId")){ + continue; + } + /*beforeRiskList.add("###czgw@"+mapo.get("otherId").toString());*/ + beforeRiskList.add("###"+mapo.get("otherId").toString()); + } + } + }//复诊 + else if(StringUtils.isNotEmpty(antExRecordModel1.getfId()) && antExRecordModel1.getType()==1){ + AntenatalExaminationModel data = antExService.findOneById(antExRecordModel1.getfId()); + //复诊使用产检中的高危因素 + if (data!=null && StringUtils.isNotEmpty(data.getRiskFactor()) && !"{}".equals(data.getRiskFactor()) && !"[]".equals(data.getRiskFactor())) { + // System.out.println(data.getRiskFactor()); + List> listOtherRisk = new ArrayList<>(); + if (data.getRiskFactor().startsWith("[") && data.getRiskFactor().endsWith("]")) { + List list2 = JsonUtil.toList(data.getRiskFactor(), String.class); + /* for (String czgw : list2) { + beforeRiskList.add("fzgw@"+czgw); + }*/ + beforeRiskList.addAll(list2); + } + } + //复诊添加其它高危 + if (data!=null && StringUtils.isNotEmpty(data.getOtherRisk()) && !"{}".equals(data.getOtherRisk()) && !"[]".equals(data.getOtherRisk())) { + // System.out.println(data.getOtherRisk()); + List> listOtherRisk = new ArrayList<>(); + ResolveUtils.queryOtherRisk(data.getOtherRisk(), listOtherRisk); + for (Map mapo: listOtherRisk) { + if(!mapo.containsKey("otherId")){ + continue; + } + /*beforeRiskList.add("###fzgw@"+mapo.get("otherId").toString());*/ + beforeRiskList.add("###"+mapo.get("otherId").toString()); + } + } + + } + if(beforeRiskList.contains("d42eec03-aa86-45b8-a4e0-78a0ff365fb6")){ + beforeRiskList.remove("d42eec03-aa86-45b8-a4e0-78a0ff365fb6"); + } + + } + + private void getRisk(String highRisk, String oRisk, Map map) { + HighScoreResult highScoreResult = null; + if (org.apache.commons.lang.StringUtils.isNotEmpty(highRisk)) { + List ids = JsonUtil.toList(highRisk, String.class); + if (CollectionUtils.isNotEmpty(ids)) { + highScoreResult = ResolveUtils.queryRisk(ids, true, basicConfigService); + } + } + Integer score = 0; + if (highScoreResult != null && highScoreResult.getScore() != null) { + score = highScoreResult.getScore(); + } + List> list = new ArrayList<>(); + List> checkList = ResolveUtils.queryHighRisk(highScoreResult); + if (CollectionUtils.isNotEmpty(checkList)) { + list.addAll(checkList); + } + if (org.apache.commons.lang.StringUtils.isNotEmpty(oRisk) && !"{}".equals(oRisk) && !"[]".equals(oRisk)) { + List> listOtherRisk = new ArrayList<>(); + ResolveUtils.queryOtherRisk(oRisk, listOtherRisk); + + for (Map otherRisk : listOtherRisk) { + if (otherRisk != null) { + if (otherRisk.get("score") != null && org.apache.commons.lang.StringUtils.isNotEmpty(otherRisk.get("score").toString())) { + String s = (String) otherRisk.get("score"); + if (com.lyms.platform.common.utils.StringUtils.isNotEmpty(s) && FunvCommonUtil.isNumeric(s)) { + score += Integer.parseInt(s); + } + } + } + list.add(otherRisk); + } + } + map.put("score", UnitUtils.unitSplice(score, UnitConstants.FEN)); + map.put("highRisk", list); + } /** * 功能描述 根据产检时间升序排列 * diff --git a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/facade/HosptialHighRiskFacade.java b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/facade/HosptialHighRiskFacade.java index fd32a62..3f4c206 100644 --- a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/facade/HosptialHighRiskFacade.java +++ b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/facade/HosptialHighRiskFacade.java @@ -49,6 +49,14 @@ public class HosptialHighRiskFacade { colorMap.put("315107bd-91fe-42a1-9237-752f3c046a40", "risk_" + RiskDefaultTypeEnum.getColor("黄色")); } + public static Map colorNameMap = new HashMap<>(); + static { + ; + colorNameMap.put("risk_orange", "橙色"); + colorNameMap.put("risk_yellow", "黄色"); + colorNameMap.put("risk_red", "红色"); + colorNameMap.put("risk_purple", "紫色"); + } public static Map scoreMap = new HashMap<>(); static { diff --git a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/result/RiskStatisticsResult.java b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/result/RiskStatisticsResult.java new file mode 100644 index 0000000..62b55c1 --- /dev/null +++ b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/result/RiskStatisticsResult.java @@ -0,0 +1,51 @@ +package com.lyms.platform.operate.web.result; + +public class RiskStatisticsResult { + + private String id ; + private String name ; + private String color ; + private String fuzChz ; + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getColor() { + return color; + } + + public void setColor(String color) { + this.color = color; + } + + public String getFuzChz() { + return fuzChz; + } + + public void setFuzChz(String fuzChz) { + this.fuzChz = fuzChz; + } + + @Override + public String toString() { + return "RiskStatisticsResult{" + + "id='" + id + '\'' + + ", name='" + name + '\'' + + ", color='" + color + '\'' + + ", fuzChz='" + fuzChz + '\'' + + '}'; + } +} \ No newline at end of file -- 1.8.3.1