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 05e6cb0..c049b15 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 @@ -269,6 +269,19 @@ public class AntenatalExaminationController extends BaseController { return antExRecordFacade.findList(antExManagerQueryRequest, loginState.getId(), false, "true",antExManagerQueryRequest.isCurrent()); } + /** + * 功能描述 + * @author 武涛涛 + * @date 2020/6/4 + */ + @RequestMapping(method = RequestMethod.GET, value = "/antex/findStatisticalRisk") + @ResponseBody + @TokenRequired + public BaseResponse findStatisticalRisk(@Valid AntExManagerQueryRequest antExManagerQueryRequest, HttpServletRequest request) { + LoginContext loginState = (LoginContext) request.getAttribute("loginContext"); + return antExRecordFacade.findStatisticalRisk(antExManagerQueryRequest, loginState.getId(), false, "true"); + } + /** * 导出产检管理接口 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 b13201c..27423a1 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 @@ -41,6 +41,7 @@ import org.springframework.stereotype.Component; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.OutputStream; +import java.text.SimpleDateFormat; import java.util.*; import java.util.concurrent.Callable; import java.util.concurrent.Future; @@ -53,6 +54,7 @@ import java.util.concurrent.TimeUnit; */ @Component public class AntExRecordFacade { + public static final List INCR_HRISK = new ArrayList(); @Autowired private AntExRecordService recordService; @Autowired @@ -279,7 +281,7 @@ public class AntExRecordFacade { * * @return */ - public BaseResponse findList(AntExManagerQueryRequest antExManagerQueryRequest, Integer userId, boolean isRegion, String isPage,boolean isCurrent) { + public BaseResponse findList(AntExManagerQueryRequest antExManagerQueryRequest, Integer userId, boolean isRegion, String isPage, boolean isCurrent) { PatientsQuery patientsQuery = new PatientsQuery(); List patientses = null; if (StringUtils.isNotEmpty(antExManagerQueryRequest.getQueryNo())) { @@ -314,39 +316,25 @@ public class AntExRecordFacade { List antExRecordModelList = recordService.queryAntExRecords(antExRecordQuery, Sort.Direction.DESC, "created"); List data = getAntExRecords(antExRecordModelList, hospital, isRegion, antExManagerQueryRequest.getShowDetail()); - if (isCurrent && CollectionUtils.isNotEmpty(data)) - { - for (AntExManagerResult result : data) - { - if (CollectionUtils.isNotEmpty(result.getrLevel())) - { + if (isCurrent && CollectionUtils.isNotEmpty(data)) { + for (AntExManagerResult result : data) { + if (CollectionUtils.isNotEmpty(result.getrLevel())) { List list = result.getrLevel(); List ids = new ArrayList<>(); - for (Map map : list) - { - if(map.get("id") != null) - { + for (Map map : list) { + if (map.get("id") != null) { ids.add(map.get("id").toString()); } } - if (ids.contains("224b2329-cb82-4da3-a071-8527f8283aab")) - { + if (ids.contains("224b2329-cb82-4da3-a071-8527f8283aab")) { result.setLevelNum(1); - } - else if (ids.contains("eb146c03-b19f-4e28-b85f-fda574b2283b")) - { + } else if (ids.contains("eb146c03-b19f-4e28-b85f-fda574b2283b")) { result.setLevelNum(2); - } - else if (ids.contains("49a36aea-c5b6-4162-87d2-9eb3c6ec00c2")) - { + } else if (ids.contains("49a36aea-c5b6-4162-87d2-9eb3c6ec00c2")) { result.setLevelNum(3); - } - else if (ids.contains("315107bd-91fe-42a1-9237-752f3c046a40")) - { + } else if (ids.contains("315107bd-91fe-42a1-9237-752f3c046a40")) { result.setLevelNum(4); - } - else if (ids.contains("49a36aea-c5b6-4162-87d2-9eb3c6ec00c2")) - { + } else if (ids.contains("49a36aea-c5b6-4162-87d2-9eb3c6ec00c2")) { result.setLevelNum(5); } } @@ -355,8 +343,7 @@ public class AntExRecordFacade { Collections.sort(data, new Comparator() { @Override public int compare(AntExManagerResult o1, AntExManagerResult o2) { - if (o1 == null || o2 == null) - { + if (o1 == null || o2 == null) { return 0; } return o1.getLevelNum() - o2.getLevelNum(); @@ -368,6 +355,145 @@ public class AntExRecordFacade { return new BaseListResponse().setData(data).setErrorcode(ErrorCodeConstants.SUCCESS).setErrormsg("成功").setPageInfo(antExRecordQuery.getPageInfo()); } + /** + * 功能描述 威海妇幼统计各个高危总数,及初诊复诊各个高危总数 + * 这几个场景都没问题 110101199003074960 110101199003071102 测试了1 初诊 复诊 复诊, 2 初诊 复诊 3 复诊 复诊 复诊 场景 + * + * 缺少 初诊复诊分别统计,级别统计,和补充高危统计。 + * + * @return + * @author 武涛涛 + * @date 2020/6/4 + * // * @param 参数说明antExManagerQueryRequest.cTime产检时间, userId 当前用户id , isRegion false,isPage "false", + */ + public BaseResponse findStatisticalRisk(AntExManagerQueryRequest antExManagerQueryRequest, Integer userId, boolean isRegion, String isPage) { + List incrHrisk = null;//存储高危id + AntExRecordQuery antExRecordQuery = null; + try { + incrHrisk = new ArrayList(); + antExRecordQuery = complayRequest(userId, antExManagerQueryRequest, isRegion, isPage); + String hospital = autoMatchFacade.getHospitalId(userId); + antExRecordQuery.setHospitalId(hospital); + List antExRecordModelList = recordService.queryAntExRecords(antExRecordQuery, Sort.Direction.DESC, "created"); + System.out.println("1------获取产检条数------" + antExRecordModelList.size()); + Map> map = handleAntexRecord2(antExRecordModelList); + System.out.println("2-----获取产检孕妇人数-------" + map.size()); + if (map != null && map.size() > 0) { + Iterator>> iterator = map.entrySet().iterator(); + while (iterator.hasNext()) { + Map.Entry> next = iterator.next(); + List valueList = next.getValue(); + if (CollectionUtils.isNotEmpty(valueList)) { + ListSort(valueList);//升序 + System.out.println("3---获取单个孕妇产检数--1111---" + valueList.size()); + //获取个人第一个产检,判断是否为复诊 + AntExRecordModel antExRecordModel = valueList.get(0); + 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); + if (CollectionUtils.isNotEmpty(beforeAntRecords)) { + AntExRecordModel antExRecordModel1 = beforeAntRecords.get(0); + //将产检信息添加到这个人产检记录中 + valueList.add(antExRecordModel1);// + } + } + + System.out.println("4----获取单个孕妇产检数--2222----" + valueList.size()); + ListSort(valueList); + //个人产检信息,统计高危 valueList + //遍历个人产检list + + for (int i = 0; i < valueList.size(); i++) { + //获取第一条 + 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){ + incrHrisk.addAll(beforeRiskList); + if(valueList.size() == 1){ + break; + } + } + //初诊和复诊,复诊和复诊比对避免超出坐标 + if((i + 1) >= valueList.size()){ + break; + } + //获取第二条进行比对 + List currentRiskList = valueList.get(i + 1).gethRisk(); + for (Object riskId : currentRiskList) { + if (!beforeRiskList.contains(riskId)) { + incrHrisk.add(String.valueOf(riskId)); + } + } + //不在比对孕妇最后一条 + if((i + 2) == valueList.size()){ + break; + } + + + } + } + } + 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());*/ + + } + } catch (Exception e) { + e.printStackTrace(); + } + + return new BaseListResponse().setData(incrHrisk).setErrorcode(ErrorCodeConstants.SUCCESS).setErrormsg("成功").setPageInfo(antExRecordQuery.getPageInfo()); + } + + /** + * 功能描述 根据产检时间升序排列 + * + * @param + * @return + * @author 武涛涛 + * @date 2020/6/4 + */ + private static void ListSort(List list) { + Collections.sort(list, new Comparator() { + @Override + public int compare(AntExRecordModel o1, AntExRecordModel o2) { +// SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); + try { +// Date dt1 = format.parse(o1.getCheckTime());//排序字段 +// Date dt2 = format.parse(o2.getCheckTime()); +// Date dt1 = o1.getCheckTime();//排序字段 +// Date dt2 = o2.getCheckTime(); + + Date dt1 = o1.getCreated();//排序字段 + Date dt2 = o2.getCreated(); + if (dt1.getTime() > dt2.getTime()) { + return 1; + } else if (dt1.getTime() < dt2.getTime()) { + return -1; + } else { + return 0; + } + } catch (Exception e) { + e.printStackTrace(); + } + return 0; + } + }); + } + private List getAntExRecords(List antExRecordModelList, String hospital, boolean isRegion, Integer isShowDetail) { List data = new ArrayList<>(); @@ -576,7 +702,7 @@ public class AntExRecordFacade { public void exportFindAntEx(AntExManagerQueryRequest antExManagerQueryRequest, Integer id, boolean b, HttpServletResponse httpServletResponse) { - BaseListResponse listRep = (BaseListResponse) findList(antExManagerQueryRequest, id, b, null,false); + BaseListResponse listRep = (BaseListResponse) findList(antExManagerQueryRequest, id, b, null, false); List> datas = new ArrayList<>(); try { if (listRep != null) { @@ -645,7 +771,7 @@ public class AntExRecordFacade { } public void exportfindRegionAntEx(AntExManagerQueryRequest antExManagerQueryRequest, Integer id, boolean b, HttpServletResponse httpServletResponse) { - BaseListResponse listRep = (BaseListResponse) findList(antExManagerQueryRequest, id, b, null,false); + BaseListResponse listRep = (BaseListResponse) findList(antExManagerQueryRequest, id, b, null, false); List> datas = new ArrayList<>(); try { @@ -787,8 +913,8 @@ public class AntExRecordFacade { map.put(recordModel.getParentId(), list); //初诊直接保存在 初诊list if (recordModel.getType() == 2 && CollectionUtils.isNotEmpty(recordModel.gethRisk())) { - System.out.println("初诊entry.size():" +recordModel.getId()); - getGwName(listgw, recordModel,false,null); + System.out.println("初诊entry.size():" + recordModel.getId()); + getGwName(listgw, recordModel, false, null); //删除map内容 map.remove(recordModel.getParentId()); } @@ -805,7 +931,7 @@ public class AntExRecordFacade { continue; } //复诊一次 - System.out.println("复诊一次entry.size():" +entry.size()); + System.out.println("复诊一次entry.size():" + entry.size()); if (entry.size() == 1) { beforeRecordQuery.setParentId(entry.get(0).getParentId()); beforeRecordQuery.setCheckTimeLt(entry.get(0).getCheckTime()); @@ -816,11 +942,11 @@ public class AntExRecordFacade { List beforeRiskList = twoRecord.gethRisk();//上一次高危 for (Object riskId : currentRiskList) { if (!beforeRiskList.contains(riskId)) { - if(riskId==null){ + if (riskId == null) { continue; } - if (!entry.isEmpty()){ - getGwName(listgw, entry.get(0),true,riskId.toString()); + if (!entry.isEmpty()) { + getGwName(listgw, entry.get(0), true, riskId.toString()); } } @@ -829,7 +955,7 @@ public class AntExRecordFacade { } //复诊多次 else { - System.out.println("复诊多次entry.size():" +entry.size()); + System.out.println("复诊多次entry.size():" + entry.size()); List entry1 = entry; for (int i = 0; i < entry1.size(); i++) { if (entry1.get(i).getCheckTime() != null) { @@ -861,11 +987,11 @@ public class AntExRecordFacade { List beforeRiskList = twoRecord.gethRisk();//上一次高危 for (Object riskId : currentRiskList) { if (!beforeRiskList.contains(riskId)) { - if(riskId==null){ + if (riskId == null) { continue; } - if (!entry.isEmpty()){ - getGwName(listgw, entry.get(0),true,riskId.toString()); + if (!entry.isEmpty()) { + getGwName(listgw, entry.get(0), true, riskId.toString()); } } } @@ -880,11 +1006,11 @@ public class AntExRecordFacade { List beforeRiskList = twoRecord.gethRisk();//上一次高危 for (Object riskId : currentRiskList) { if (!beforeRiskList.contains(riskId)) { - if(riskId==null){ + if (riskId == null) { continue; } - if (!entry.isEmpty()){ - getGwName(listgw, entry.get(0),true,riskId.toString()); + if (!entry.isEmpty()) { + getGwName(listgw, entry.get(0), true, riskId.toString()); } } } @@ -1123,6 +1249,30 @@ public class AntExRecordFacade { /** + * 功能描述 把同一个人的产检记录放入集合 + * + * @param + * @return + * @author 武涛涛 + * @date 2020/6/4 + */ + private Map> handleAntexRecord2(List antExRecordModelList) { + Map> map = new HashMap<>(); + if (CollectionUtils.isNotEmpty(antExRecordModelList)) { + for (AntExRecordModel recordModel : antExRecordModelList) { + List list = map.get(recordModel.getParentId()); + if (CollectionUtils.isEmpty(list)) { + list = new ArrayList<>(); + } + list.add(recordModel); + map.put(recordModel.getParentId(), list); + + } + } + return map; + } + + /** * 把同一个人的产检记录放入集合 * * @param antExRecordModelList @@ -1145,8 +1295,7 @@ public class AntExRecordFacade { return map; } - public boolean isOpenAutoSaveAntenatal(String hospitalId) - { + public boolean isOpenAutoSaveAntenatal(String hospitalId) { String value = ""; //查询当前医院是否有配置此权限 ModularFunctionConfigModel functionConfigModel = mongoTemplate.findOne(Query.query(Criteria.where("hospitalId").is(hospitalId)), ModularFunctionConfigModel.class); @@ -1165,16 +1314,14 @@ public class AntExRecordFacade { /** - * * 如果是体重测量在后,就通过测量体重时候去修改产检中的体重 + * * @param hospitalId * @param pid * @param nutritionInfoRequest */ - public void updateAntenatal(String hospitalId,String pid,NutritionInfoRequest nutritionInfoRequest) - { - if (!isOpenAutoSaveAntenatal(hospitalId)) - { + public void updateAntenatal(String hospitalId, String pid, NutritionInfoRequest nutritionInfoRequest) { + if (!isOpenAutoSaveAntenatal(hospitalId)) { return; } @@ -1333,10 +1480,8 @@ public class AntExRecordFacade { } //获取体重记录 List patientWeights = mongoTemplate.find(Query.query(Criteria.where("pid").is(pid).and("yn").is("1")), PatientWeight.class); - if (CollectionUtils.isNotEmpty(patientWeights)) - { - for (PatientWeight patientWeight : patientWeights) - { + if (CollectionUtils.isNotEmpty(patientWeights)) { + for (PatientWeight patientWeight : patientWeights) { if (patientWeight != null) { Map dayWeights = patientWeight.getDayWeights(); if (null != dayWeights && dayWeights.size() > 0) { @@ -1537,29 +1682,26 @@ public class AntExRecordFacade { public BaseResponse getPlanReport(String orderTime, Integer userId) { - Map data = new HashMap<>(); + Map data = new HashMap<>(); String hospitalId = autoMatchFacade.getHospitalId(userId); - if (orderTime != null) - { + if (orderTime != null) { String[] arrs = orderTime.split(" - "); Date start = DateUtil.parseYMD(arrs[0]); Date end = DateUtil.parseYMD(arrs[1]); - long count = mongoTemplate.count(Query.query(Criteria.where("hospitalId").is(hospitalId).and("nextCheckTime").gte(DateUtil.getDayFirstSecond(start)).lte(DateUtil.getDayLastSecond(end))), CheckItemOrder.class); - data.put("allCount",String.valueOf(count)); + long count = mongoTemplate.count(Query.query(Criteria.where("hospitalId").is(hospitalId).and("nextCheckTime").gte(DateUtil.getDayFirstSecond(start)).lte(DateUtil.getDayLastSecond(end))), CheckItemOrder.class); + data.put("allCount", String.valueOf(count)); List itemConfigs = mongoTemplate.find(Query.query(Criteria.where("hospitalId").is(hospitalId)), CheckItemConfig.class); - if (CollectionUtils.isNotEmpty(itemConfigs)) - { + if (CollectionUtils.isNotEmpty(itemConfigs)) { List list = new ArrayList<>(); - for (CheckItemConfig item : itemConfigs) - { - long itemCount = mongoTemplate.count(Query.query(Criteria.where("hospitalId").is(hospitalId).and("nextCheckTime").gte(DateUtil.getDayFirstSecond(start)).lte(DateUtil.getDayLastSecond(end)).and("itemId").is(item.getId())), CheckItemOrder.class); - Map map = new HashMap<>(); - map.put("itemName",item.getName()); - map.put("itemCount",String.valueOf(itemCount)); + for (CheckItemConfig item : itemConfigs) { + long itemCount = mongoTemplate.count(Query.query(Criteria.where("hospitalId").is(hospitalId).and("nextCheckTime").gte(DateUtil.getDayFirstSecond(start)).lte(DateUtil.getDayLastSecond(end)).and("itemId").is(item.getId())), CheckItemOrder.class); + Map map = new HashMap<>(); + map.put("itemName", item.getName()); + map.put("itemCount", String.valueOf(itemCount)); list.add(map); } - data.put("itemList",list); + data.put("itemList", list); } } return new BaseObjectResponse().setErrorcode(ErrorCodeConstants.SUCCESS).setData(data).setErrormsg("成功"); @@ -1567,7 +1709,7 @@ public class AntExRecordFacade { public BaseResponse getActualReport(String checkTime, Integer userId) { - Map data = new HashMap<>(); + Map data = new HashMap<>(); String hospitalId = autoMatchFacade.getHospitalId(userId); if (checkTime != null) { String[] arrs = checkTime.split(" - ");