diff --git a/platform-biz-patient-service/src/main/java/com/lyms/platform/biz/dal/IMatDeliverDao.java b/platform-biz-patient-service/src/main/java/com/lyms/platform/biz/dal/IMatDeliverDao.java index ccf200d..d7ee0a0 100644 --- a/platform-biz-patient-service/src/main/java/com/lyms/platform/biz/dal/IMatDeliverDao.java +++ b/platform-biz-patient-service/src/main/java/com/lyms/platform/biz/dal/IMatDeliverDao.java @@ -3,6 +3,7 @@ package com.lyms.platform.biz.dal; import com.lyms.platform.common.dao.operator.MongoQuery; import com.lyms.platform.pojo.MaternalDeliverModel; +import java.util.HashMap; import java.util.List; /** @@ -62,4 +63,6 @@ public interface IMatDeliverDao { int count(MongoQuery mongoQuery); List pageQuery(MongoQuery mongoQuery); + + List aggregateOne(MongoQuery mongoQuery); } diff --git a/platform-biz-patient-service/src/main/java/com/lyms/platform/biz/dal/impl/MatDeliverDaoImpl.java b/platform-biz-patient-service/src/main/java/com/lyms/platform/biz/dal/impl/MatDeliverDaoImpl.java index b8a69e5..5e11f2f 100644 --- a/platform-biz-patient-service/src/main/java/com/lyms/platform/biz/dal/impl/MatDeliverDaoImpl.java +++ b/platform-biz-patient-service/src/main/java/com/lyms/platform/biz/dal/impl/MatDeliverDaoImpl.java @@ -6,9 +6,13 @@ import com.lyms.platform.common.dao.operator.MongoCondition; import com.lyms.platform.common.dao.operator.MongoOper; import com.lyms.platform.common.dao.operator.MongoQuery; import com.lyms.platform.pojo.MaternalDeliverModel; +import org.springframework.data.mongodb.core.aggregation.Aggregation; +import org.springframework.data.mongodb.core.aggregation.AggregationOperation; +import org.springframework.data.mongodb.core.aggregation.AggregationResults; import org.springframework.stereotype.Repository; import java.util.Date; +import java.util.HashMap; import java.util.List; /** @@ -72,4 +76,20 @@ public class MatDeliverDaoImpl extends BaseMongoDAOImpl im public List pageQuery(MongoQuery mongoQuery) { return super.find(mongoQuery.convertToMongoQuery()); } + /** + * 统计单个医院的产检情况 + * + * @param mongoQuery + * @return + */ + public List aggregateOne(MongoQuery mongoQuery){ + AggregationOperation match = Aggregation.match(mongoQuery.getCriteria()); + + AggregationOperation group = Aggregation.group("visitDoctor").count().as("count"); + + Aggregation aggregation= Aggregation.newAggregation(match, group); + + AggregationResults result = mongoTemplate.aggregate(aggregation,"lyms_matdeliver_follow", HashMap.class); + return result.getMappedResults(); + } } diff --git a/platform-biz-patient-service/src/main/java/com/lyms/platform/biz/service/MatDeliverService.java b/platform-biz-patient-service/src/main/java/com/lyms/platform/biz/service/MatDeliverService.java index a89a368..042e171 100644 --- a/platform-biz-patient-service/src/main/java/com/lyms/platform/biz/service/MatDeliverService.java +++ b/platform-biz-patient-service/src/main/java/com/lyms/platform/biz/service/MatDeliverService.java @@ -66,4 +66,8 @@ public class MatDeliverService { mongoQuery.start(matDeliverQuery.getOffset()).end(matDeliverQuery.getLimit()); return iMatDeliverDao.pageQuery(mongoQuery.addOrder(Sort.Direction.DESC, "created")); } + + public List aggregateOne(MatDeliverQuery matDeliverQuery) { + return iMatDeliverDao.aggregateOne(matDeliverQuery.convertToQuery()); + } } diff --git a/platform-dal/src/main/java/com/lyms/platform/query/MatDeliverQuery.java b/platform-dal/src/main/java/com/lyms/platform/query/MatDeliverQuery.java index af26750..523998d 100644 --- a/platform-dal/src/main/java/com/lyms/platform/query/MatDeliverQuery.java +++ b/platform-dal/src/main/java/com/lyms/platform/query/MatDeliverQuery.java @@ -56,6 +56,16 @@ public class MatDeliverQuery extends BaseQuery implements IConvertToNativeQuery //分娩记录加住院管床大夫 private String gcdfDoctorId; + private Boolean NeNullVisitDoctor; + + public Boolean getNeNullVisitDoctor() { + return NeNullVisitDoctor; + } + + public void setNeNullVisitDoctor(Boolean neNullVisitDoctor) { + NeNullVisitDoctor = neNullVisitDoctor; + } + public String getGcdfDoctorId() { return gcdfDoctorId; } @@ -227,6 +237,19 @@ public class MatDeliverQuery extends BaseQuery implements IConvertToNativeQuery private String areaPostRestId; private String streetPostRestId; + /** + * 访视医生 + */ + private String visitDoctor; + + public String getVisitDoctor() { + return visitDoctor; + } + + public void setVisitDoctor(String visitDoctor) { + this.visitDoctor = visitDoctor; + } + public String getStreetPostRestId() { return streetPostRestId; } @@ -487,6 +510,10 @@ public class MatDeliverQuery extends BaseQuery implements IConvertToNativeQuery condition = condition.and("hospitalId", hospitalId, MongoOper.IS); } + if (null != NeNullVisitDoctor) { + condition = condition.and("visitDoctor", null, MongoOper.NE); + } + // /** // * 转介地 // */ diff --git a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/controller/MatdeliverFollowController.java b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/controller/MatdeliverFollowController.java index 5c3454a..f365327 100644 --- a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/controller/MatdeliverFollowController.java +++ b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/controller/MatdeliverFollowController.java @@ -120,6 +120,17 @@ public class MatdeliverFollowController extends BaseController { return matdeliverFollowFacade.getPostpartumFollowMake(matdeliverFollowRequest, loginState.getId()); } + @RequestMapping(value = "/fsStatistics", method = RequestMethod.GET) + @ResponseBody + @TokenRequired + public BaseResponse fsStatistics( + FsMatdeliverFollowRequest fsMatdeliverFollowRequest, + HttpServletRequest request){ + LoginContext loginState = (LoginContext) request.getAttribute("loginContext"); + fsMatdeliverFollowRequest.setNeed("need"); + return matdeliverFollowFacade.queryStatis(fsMatdeliverFollowRequest, loginState.getId()); + } + /** * 产后转介 * @param param 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 acc3310..506ec8a 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 @@ -2035,6 +2035,574 @@ public class MatDeliverFacade { } /** + * 访视统计 + * + * @return + */ + public BaseResponse queryStatis(FsMatdeliverFollowRequest fsMatdeliverFollowRequest) { + BaseListResponse listResponse = new BaseListResponse(); + List data = new ArrayList<>(); + String hospitalId = autoMatchFacade.getHospitalId(fsMatdeliverFollowRequest.getOperatorId()); + if (com.lyms.platform.common.utils.StringUtils.isEmpty(hospitalId)) { + listResponse.setErrormsg("获取医院id为空").setErrorcode(ErrorCodeConstants.SUCCESS); + return listResponse; + } + MatDeliverQuery matDeliverQuery = new MatDeliverQuery(); +// PatientsQuery patientsQuery1=new PatientsQuery(); + matDeliverQuery.setHospitalId(hospitalId); + matDeliverQuery.setPage(fsMatdeliverFollowRequest.getPage()); + matDeliverQuery.setLimit(fsMatdeliverFollowRequest.getLimit()); + matDeliverQuery.setVisitDoctor(fsMatdeliverFollowRequest.getdId()); + List fmhospitalId = new ArrayList <>(); + if (StringUtils.isNotEmpty(fsMatdeliverFollowRequest.getHospitalId())) { + fmhospitalId.add(fsMatdeliverFollowRequest.getHospitalId()); + matDeliverQuery.setFmHospitalList(fmhospitalId); + } else if (StringUtils.isNotEmpty(fsMatdeliverFollowRequest.getHospitalProvinceId()) || StringUtils.isNotEmpty(fsMatdeliverFollowRequest.getHospitalCityId()) || StringUtils.isNotEmpty(fsMatdeliverFollowRequest.getHospitalAreaId())) { + OrganizationQuery organizationQuery = new OrganizationQuery(); + if (StringUtils.isNotEmpty(fsMatdeliverFollowRequest.getHospitalProvinceId())) { + organizationQuery.setProvinceId(fsMatdeliverFollowRequest.getHospitalProvinceId()); + } + if (StringUtils.isNotEmpty(fsMatdeliverFollowRequest.getHospitalCityId())) { + organizationQuery.setCityId(fsMatdeliverFollowRequest.getHospitalCityId()); + } + if (StringUtils.isNotEmpty(fsMatdeliverFollowRequest.getHospitalAreaId())) { + organizationQuery.setAreaId(fsMatdeliverFollowRequest.getHospitalAreaId()); + } + organizationQuery.setYn(YnEnums.YES.getId()); + List organizationList = organizationService.queryHospitals(organizationQuery); + if (CollectionUtils.isNotEmpty(organizationList)) { + for (Organization organization : organizationList) { + fmhospitalId.add(organization.getId().toString()); + } + } + + if (CollectionUtils.isNotEmpty(fmhospitalId)) { + if (!fmhospitalId.contains(hospitalId)) { + fmhospitalId.contains(hospitalId); + } + matDeliverQuery.setFmHospitalList(fmhospitalId); + } else { + return listResponse; + } + } + + if (fsMatdeliverFollowRequest.getFollowStarDate() != null) { + MatDeliverFollowQuery matDeliverFollowQuery = new MatDeliverFollowQuery(); + matDeliverFollowQuery.setVisitStartDate(fsMatdeliverFollowRequest.getFollowStarDate()); + matDeliverFollowQuery.setVisitEndDate(fsMatdeliverFollowRequest.getFollowEndDate()); + + List matdeliverFollowModels = matDeliverFollowService.query(matDeliverFollowQuery); + List mfIds = new ArrayList <>(); + for (MatdeliverFollowModel md : matdeliverFollowModels) { + mfIds.add(md.getDeliverId()); + } + if (CollectionUtils.isEmpty(mfIds)) { + // 没有查到,直接抛出 + return listResponse; + } + matDeliverQuery.setIds(mfIds); + } + + + //查询号不为空,则查询孕妇id + if (StringUtils.isNotEmpty(fsMatdeliverFollowRequest.getQueryNo())//查询号不为空 + || StringUtils.isNotEmpty(fsMatdeliverFollowRequest.getProvinceId())//居住地省 + || StringUtils.isNotEmpty(fsMatdeliverFollowRequest.getCityId())//居住地市 + || StringUtils.isNotEmpty(fsMatdeliverFollowRequest.getAreaId())//居住区 + || StringUtils.isNotEmpty(fsMatdeliverFollowRequest.getStreetId())//居住街道 + || StringUtils.isNotEmpty(fsMatdeliverFollowRequest.getHighRiskLevel()) // 高危等级 + ) { + PatientsQuery patientsQuery = new PatientsQuery(); + patientsQuery.setQueryNo(fsMatdeliverFollowRequest.getQueryNo()); + patientsQuery.setYn(YnEnums.YES.getId()); + patientsQuery.setIsAutoFm(YnEnums.NO.getId()); + patientsQuery.setType(3); + //居住地 注意需要反起查询,不要搞错l,原因:前端小弟把数据存反了 + patientsQuery.setAreaRegisterId(fsMatdeliverFollowRequest.getAreaId()); + patientsQuery.setCityRegisterId(fsMatdeliverFollowRequest.getCityId()); + patientsQuery.setProvinceRegisterId(fsMatdeliverFollowRequest.getProvinceId()); + patientsQuery.setStreetRegisterId(fsMatdeliverFollowRequest.getStreetId()); + + if (StringUtils.isNotEmpty(fsMatdeliverFollowRequest.getBirthDate())) { + patientsQuery.setFmDateStart(DateUtil.getSNDate(fsMatdeliverFollowRequest.getBirthDate())[0]); + patientsQuery.setFmDateEnd(DateUtil.getSNDate(fsMatdeliverFollowRequest.getBirthDate())[1]); + } + + if (fsMatdeliverFollowRequest.getFollowStage() != null) {//按访视阶段查询 + if (fsMatdeliverFollowRequest.getFollowStage() == 1) {//1、访视期内 分娩时间为:21天到当前时间 + patientsQuery.setFmDateStart(DateUtil.addDay(new Date(), -29)); + patientsQuery.setFmDateEnd(new Date()); + } else if (fsMatdeliverFollowRequest.getFollowStage() == 2) {//2、超出访视期 分娩时间为:结束时间为:21天前的 + patientsQuery.setFmDateEnd(DateUtil.addDay(new Date(), -29)); + } + } + //patientsQuery.setFmHospitalQueryList(hospitalList); + //patientsQuery.setTownOrgId(hospitalId); + + String highRiskLevel = fsMatdeliverFollowRequest.getHighRiskLevel(); + if (StringUtils.isNotEmpty(highRiskLevel)) { + patientsQuery.setrLevel(highRiskLevel); + } + List patientsList = patientsService.queryPatient(patientsQuery); + if (CollectionUtils.isEmpty(patientsList)) { + // 没有查到,直接抛出 + return listResponse; + } + + List parentIdList = new ArrayList <>(); + for (Patients patients : patientsList) { + parentIdList.add(patients.getId()); + } + matDeliverQuery.setParentIdList(parentIdList); + } + String startAge = fsMatdeliverFollowRequest.getStartAge(); + String endAge = fsMatdeliverFollowRequest.getEndAge(); + List pids = new ArrayList(); + // 年龄段 + if (com.lyms.platform.common.utils.StringUtils.isNotEmpty(startAge) && + com.lyms.platform.common.utils.StringUtils.isNotEmpty(endAge)) { + Calendar c = Calendar.getInstance(); + c.setTime(new Date()); + c.add(Calendar.YEAR, -Integer.parseInt(startAge)); + Date startDate = c.getTime(); + c.setTime(new Date()); + c.add(Calendar.YEAR, -Integer.parseInt(endAge) - 1); + Date endDate = c.getTime(); + List personModels = mongoTemplate.find(Query.query(Criteria.where("birth").gte(endDate).lt(startDate)), PersonModel.class); + for (PersonModel model : personModels) { + pids.add(model.getId()); + } + } + matDeliverQuery.setPids(pids); + + + //matDeliverQuery.setYn(YnEnums.YES.getId()); + + //产后天数=当前时间-分娩时间 + if(fsMatdeliverFollowRequest.getPostViewDay() !=null && fsMatdeliverFollowRequest.getPostViewDay()>0){ + fsMatdeliverFollowRequest.setBirthDate(DateUtil.getyyyy_MM_dd_hms(DateUtil.addDay(new Date(), -fsMatdeliverFollowRequest.getPostViewDay()))); + } + + //分娩日期 + if (StringUtils.isNotEmpty(fsMatdeliverFollowRequest.getBirthDate())) { + matDeliverQuery.setCreatedStart(DateUtil.getSNDate(fsMatdeliverFollowRequest.getBirthDate())[0]); + matDeliverQuery.setEndStart(DateUtil.getSNDate(fsMatdeliverFollowRequest.getBirthDate())[1]); + } + if (fsMatdeliverFollowRequest.getStartDay() != null && fsMatdeliverFollowRequest.getEndDay() != null) { + matDeliverQuery.setCreatedStart(DateUtil.formatDate(DateUtil.addDay(new Date(), -fsMatdeliverFollowRequest.getEndDay()))); + matDeliverQuery.setEndStart(DateUtil.formatDate(DateUtil.addDay(new Date(), -fsMatdeliverFollowRequest.getStartDay()))); + } else if (fsMatdeliverFollowRequest.getStartDay() != null) { + matDeliverQuery.setCreatedStart(DateUtil.formatDate(DateUtil.addDay(new Date(), -fsMatdeliverFollowRequest.getStartDay()))); + matDeliverQuery.setEndStart(DateUtil.formatDate(DateUtil.addDay(new Date(), -fsMatdeliverFollowRequest.getStartDay()))); + } else if (fsMatdeliverFollowRequest.getEndDay() != null) { + matDeliverQuery.setCreatedStart(DateUtil.formatDate(DateUtil.addDay(new Date(), -fsMatdeliverFollowRequest.getEndDay()))); + matDeliverQuery.setEndStart(DateUtil.formatDate(DateUtil.addDay(new Date(), -fsMatdeliverFollowRequest.getEndDay()))); + } + + // 访视列表无需加上分娩医院,因此注释 + //matDeliverQuery.setFmHospitalList(hospitalList); + + + if (fsMatdeliverFollowRequest.getFlag() != null) { + matDeliverQuery.setProvincePostRestId(fsMatdeliverFollowRequest.getProvincePostRestId()); + matDeliverQuery.setCityPostRestId(fsMatdeliverFollowRequest.getCityPostRestId()); + matDeliverQuery.setAreaPostRestId(fsMatdeliverFollowRequest.getAreaPostRestId()); + matDeliverQuery.setStreetPostRestId(fsMatdeliverFollowRequest.getStreetPostRestId()); + + if (fsMatdeliverFollowRequest.getVisitStatus() != null && fsMatdeliverFollowRequest.getVisitStatus() == 2) { + matDeliverQuery.setVisitStatus(fsMatdeliverFollowRequest.getVisitStatus()); + matDeliverQuery.setFsHospitalId(hospitalId); + } else if (fsMatdeliverFollowRequest.getVisitStatus() != null && fsMatdeliverFollowRequest.getVisitStatus() == 1) { + matDeliverQuery.setVisitStatus(fsMatdeliverFollowRequest.getVisitStatus()); + } else if (fsMatdeliverFollowRequest.getVisitStatus() != null && fsMatdeliverFollowRequest.getVisitStatus() == 3) { + matDeliverQuery.setVisitStatus(2); + } + } else { + matDeliverQuery.setFsHospitalId(hospitalId); + if (StringUtils.isNotEmpty(fsMatdeliverFollowRequest.getIsArea())) { + if (StringUtils.isNotEmpty(fsMatdeliverFollowRequest.getFsHospitalId())) { + matDeliverQuery.setIsQueryFsHospitalId(true); + matDeliverQuery.setFsHospitalId(fsMatdeliverFollowRequest.getFsHospitalId()); + } + } + + matDeliverQuery.setVisitStatus(fsMatdeliverFollowRequest.getVisitStatus()); + } + + matDeliverQuery.setContactResult(fsMatdeliverFollowRequest.getContactResult()); + if (fsMatdeliverFollowRequest.getContactReason() != null) { + matDeliverQuery.setContactResult(PostpartumFollowMakeEnums.ResultEnum.SB.getId()); + matDeliverQuery.setContactReason(fsMatdeliverFollowRequest.getContactReason()); + } + + + matDeliverQuery.setVisitAffirm(fsMatdeliverFollowRequest.getVisitAffirm()); + + matDeliverQuery.setMakeType(fsMatdeliverFollowRequest.getMakeType()); + List maternalDeliverModelList; + + if (StringUtils.isNotEmpty(fsMatdeliverFollowRequest.getRiskId())) { + PatientsQuery patientsQuery = new PatientsQuery(); + patientsQuery.setYn(YnEnums.YES.getId()); + patientsQuery.setrFactor(fsMatdeliverFollowRequest.getRiskId()); + List parentIdList = new ArrayList <>(); + List patientsList = patientsService.queryPatient(patientsQuery); + for (Patients md : patientsList) { + parentIdList.add(md.getId()); + } + List idList = matDeliverQuery.getParentIdList(); + if (CollectionUtils.isNotEmpty(idList)) { + idList.retainAll(parentIdList); + } else { + idList = parentIdList; + } + matDeliverQuery.setParentIdList(idList); + } + + + 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) { + BigDecimal multiply = new BigDecimal(okCount.toString()).divide(new BigDecimal(totalCount.toString()), 4, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal(100)); + okPercentage = multiply.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); + errorPercentage = new BigDecimal(100.00).subtract(new BigDecimal(okPercentage)).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); + } + matDeliverQuery.setVisitResult(fsMatdeliverFollowRequest.getVisitResult()); + + + // 转介地址 + matDeliverQuery.setProvinceZJId(fsMatdeliverFollowRequest.getProvinceZJId()); + matDeliverQuery.setCityZJId(fsMatdeliverFollowRequest.getCityZJId()); + matDeliverQuery.setAreaZJId(fsMatdeliverFollowRequest.getAreaZJId()); + matDeliverQuery.setStreetZJId(fsMatdeliverFollowRequest.getStreetZJId()); + + + if (fsMatdeliverFollowRequest.getType() == 1) { + if (StringUtils.isNotEmpty(fsMatdeliverFollowRequest.getNeed())) {//是否分页 + matDeliverQuery.setNeed("need"); + matDeliverQuery.setLimit(fsMatdeliverFollowRequest.getLimit()); + matDeliverQuery.setPage(fsMatdeliverFollowRequest.getPage()); + + System.out.println("::::::::产后访视::::"+matDeliverQuery.convertToQuery().convertToMongoQuery().toString()); + maternalDeliverModelList = matDeliverService.pageQuery(matDeliverQuery); + } else { + maternalDeliverModelList = matDeliverService.query(matDeliverQuery); + } + + if (CollectionUtils.isEmpty(maternalDeliverModelList)) { + + HashMap map = new HashMap <>(); + map.put("matdeliverFollowListResults", listResponse); + listResponse.setObject(map); + listResponse.setPageInfo(matDeliverQuery.getPageInfo()); + // 没有查到,直接抛出 + return listResponse; + } + + PatientsQuery patientsQuery = new PatientsQuery(); + List parentIdList = new ArrayList <>(); + for (MaternalDeliverModel md : maternalDeliverModelList) { + parentIdList.add(md.getParentId()); + } + patientsQuery.setIds(parentIdList); + List patientsList = patientsService.queryPatient(patientsQuery); + Map patientsMap = new HashMap <>(); + for (Patients patients : patientsList) { + parentIdList.add(patients.getId()); + MatdeliverFollowListResult matdeliverFollowListResult = new MatdeliverFollowListResult(); + matdeliverFollowListResult.setPid(patients.getPid()); + matdeliverFollowListResult.setPatientId(patients.getId()); + matdeliverFollowListResult.setPostViewDay(DateUtil.daysBetween(patients.getFmDate(), new Date()) + "天"); + + // 居住地 + if (fsMatdeliverFollowRequest.getFlag() == null) { + matdeliverFollowListResult.setAddress(CommonsHelper.getResidence(patients.getProvinceRegisterId(), patients.getCityRegisterId(), patients.getAreaRegisterId(), patients.getStreetRegisterId(), patients.getAddressRegister(), basicConfigService)); + } else { + //产后休养地 + matdeliverFollowListResult.setPostpartumAddress(CommonsHelper.getResidence( + patients.getProvincePostRestId() != null ? patients.getProvincePostRestId() : patients.getProvinceRegisterId(), + patients.getCityPostRestId() != null ? patients.getCityPostRestId() : patients.getCityRegisterId(), + patients.getAreaPostRestId() != null ? patients.getAreaPostRestId() : patients.getAreaRegisterId(), + patients.getStreetPostRestId() != null ? patients.getStreetPostRestId() : patients.getStreetRegisterId(), + patients.getAddressPostRest() != null ? patients.getAddressPostRest() : patients.getAddressRegister(), + basicConfigService)); + } + + + // 电话转换 + matdeliverFollowListResult.setPhone(patients.getPhone()); + //姓名 + matdeliverFollowListResult.setName(patients.getUsername()); + // 年龄 + matdeliverFollowListResult.setAge(DateUtil.getAge(patients.getBirth())); + + //放入map,进行下一步数据整合 + patientsMap.put(patients.getId(), matdeliverFollowListResult); + + + } + + + for (MaternalDeliverModel deliverModel : maternalDeliverModelList) { + MatdeliverFollowListResult matdeliverFollowListResult = patientsMap.get(deliverModel.getParentId()); + + if (matdeliverFollowListResult == null) { + continue; + } + // 转介地 + String provinceZJId = deliverModel.getProvinceZJId(); + String cityZJId = deliverModel.getCityZJId(); + String areaZJId = deliverModel.getAreaZJId(); + String streetZJId = deliverModel.getStreetZJId(); + if (StringUtils.isNotEmpty(provinceZJId) && StringUtils.isNotEmpty(cityZJId) && StringUtils.isNotEmpty(areaZJId) && StringUtils.isNotEmpty(streetZJId)) { + matdeliverFollowListResult.setAddressZJ(CommonsHelper.getResidence(provinceZJId, cityZJId, areaZJId, streetZJId, deliverModel.getAddressZJ(), basicConfigService)); + } else { + matdeliverFollowListResult.setAddressZJ(""); + } + + //最后一次随访Id + matdeliverFollowListResult.setMatFollowId(deliverModel.getMatFollowId()); + matdeliverFollowListResult.setDueDate(deliverModel.getDueDate()); + matdeliverFollowListResult.setId(deliverModel.getId()); + matdeliverFollowListResult.setVisitStatus(PostpartumFollowMakeEnums.StatusEnum.getTitle(deliverModel.getVisitStatus())); + + //机构信息 + try { + Organization organization = organizationService.getOrganization(Integer.valueOf(deliverModel.getFmHospital())); + if (organization != null) { + // 市 + BasicConfig cityName = basicConfigService.getOneBasicConfigById(organization.getCityId()); + // 区 + BasicConfig areaName = basicConfigService.getOneBasicConfigById(organization.getAreaId()); + if (cityName != null) { + matdeliverFollowListResult.setHospitalCityName(cityName.getName()); + } + if (areaName != null) { + matdeliverFollowListResult.setHospitalAreaName(areaName.getName()); + } + //分娩医院 + matdeliverFollowListResult.setFmHospital(organization.getName()); + } + } catch (Exception e) { + matdeliverFollowListResult.setFmHospital(deliverModel.getFmHospital()); + } + matdeliverFollowListResult.setContactResult(deliverModel.getContactResult()); + //预约联系结果 + if (deliverModel.getContactResult() != null) { + matdeliverFollowListResult.setContactResultStr(PostpartumFollowMakeEnums.ResultEnum.getTitle(deliverModel.getContactResult())); + if (deliverModel.getContactResult() == 1) {//预约成功,返回访视类型 + //访视类型 + if (deliverModel.getMakeType() != null) { + matdeliverFollowListResult.setMakeType(PostpartumFollowMakeEnums.TypeEnum.getTitle(deliverModel.getMakeType())); + } + } + } + //产妇确认结果 + if (deliverModel.getVisitAffirm() != null) { + matdeliverFollowListResult.setVisitAffirm(PostpartumFollowMakeEnums.VisitAffirmEnum.getTitle(deliverModel.getVisitAffirm())); + } + + + //下次访视时间 + if (deliverModel.getNextVisitDate() != null) { + matdeliverFollowListResult.setNextVisitDate(DateUtil.getyyyy_MM_dd(deliverModel.getNextVisitDate())); + } + //访视状态 0--是修改后替换的初始值 + if (deliverModel.getVisitStatus() != null && deliverModel.getVisitStatus() == 1) { + matdeliverFollowListResult.setVisitResult("待访视"); + } + //访视结果 + if (deliverModel.getVisitResult() != null && deliverModel.getVisitResult() != 0) { + matdeliverFollowListResult.setVisitResult(PostpartumFollowMakeEnums.ResultEnum.getTitle(deliverModel.getVisitResult())); + } + + matdeliverFollowListResult.setFollowStage(2); + if (StringUtils.isNotEmpty(deliverModel.getDueDate())) {//根据分娩时间判断访视时间是否过期 + Date resultDate = DateUtil.parseYMD(deliverModel.getDueDate()); + boolean isScope = DateUtil.isBetween(resultDate, DateUtil.addDay(new Date(), -29), new Date()); + matdeliverFollowListResult.setFollowStage(isScope ? 1 : 2); + } + + // 需求:现住址或者产后休养地址是衡水市桃城区的, + // 添加字段:分娩日期、胎次、分娩方式、分娩孕周、高危因素、户籍地址、现住址、产后休养地址 + Patients patient = patientsService.findOnePatientById(deliverModel.getParentId()); + boolean isTaocheng = false; + if (patient != null) { + /* String cityId = organization.getCityId(); + String areaId = organization.getAreaId();*/ + + // 戶籍地址 + String address = patient.getAddress(); + String provinceId = patient.getProvinceId(); + String cityId = patient.getCityId(); + String areaId = patient.getAreaId(); + String streetId = patient.getStreetId(); + + // 产后休养地 + String addressPostRest = patient.getAddressPostRest(); + String provincePostRestId = patient.getProvincePostRestId(); + String cityPostRestId = patient.getCityPostRestId(); + String areaPostRestId = patient.getAreaPostRestId(); + String streetPostRestId = patient.getStreetPostRestId(); + + // 居住地 + String addressRegister = patient.getAddressRegister(); + String provinceRegisterId = patient.getProvinceRegisterId(); + String cityRegisterId = patient.getCityRegisterId(); + String areaRegisterId = patient.getAreaRegisterId(); + String streetRegisterId = patient.getStreetRegisterId(); + + // 修养地和居住地是否为衡水市桃城区的 + boolean existByPostRest = "12".equals(cityPostRestId) && "160".equals(areaPostRestId); + boolean existByRegister = "12".equals(cityRegisterId) && "160".equals(areaRegisterId); + if (existByPostRest || existByRegister) { + isTaocheng = true; + matdeliverFollowListResult.setDeliverTimeStr(deliverModel.getDueDate()); + matdeliverFollowListResult.setTaiSize(deliverModel.getTireNumber()); + matdeliverFollowListResult.setDeliveryTypeStr(deliverModel.getDeliveryMode()); + matdeliverFollowListResult.setDeliveryWeek(deliverModel.getDueWeek()); + List > list = new ArrayList <>(); + List riskFactorId = patient.getRiskFactorId(); + if (CollectionUtils.isNotEmpty(riskFactorId)) { + for (String id : riskFactorId) { + HashMap hashMap = new HashMap <>(16); + BasicConfig config = basicConfigService.getOneBasicConfigById(id); + hashMap.put("id", id); + hashMap.put("bean", config); + list.add(hashMap); + + } + } + matdeliverFollowListResult.setHighRiskFactors(list); + + // 户籍 + String province = getAddressNameById(provinceId); + String city = getAddressNameById(cityId); + String area = getAddressNameById(areaId); + String street = getAddressNameById(streetId); + matdeliverFollowListResult.setHujiAddress(province + city + area + street + address); + + // 居住地 + String provinceRegister = getAddressNameById(provinceRegisterId); + String cityRegister = getAddressNameById(cityRegisterId); + String areaRegister = getAddressNameById(areaRegisterId); + String streetRegister = getAddressNameById(streetRegisterId); + matdeliverFollowListResult.setCurrentAddress(provinceRegister + cityRegister + areaRegister + streetRegister + addressRegister); + + // 产后休养地 + String provincePostRest = getAddressNameById(provincePostRestId); + String cityPostRest = getAddressNameById(cityPostRestId); + String areaPostRest = getAddressNameById(areaPostRestId); + String streetPostRest = getAddressNameById(streetPostRestId); + matdeliverFollowListResult.setPostpartumAddress(provincePostRest + cityPostRest + areaPostRest + streetPostRest + addressPostRest); + } + if("12".equals(cityRegisterId) ){ + // 居住地 + String provinceRegister = getAddressNameById(provinceRegisterId); + String cityRegister = getAddressNameById(cityRegisterId); + String areaRegister = getAddressNameById(areaRegisterId); + String streetRegister = getAddressNameById(streetRegisterId); + matdeliverFollowListResult.setCurrentAddress(provinceRegister + cityRegister + areaRegister + streetRegister + addressRegister); + } + + // 添加高危等级、失败原因 + String riskLevelId = patient.getRiskLevelId(); + List > objects = new ArrayList <>(); + if (com.lyms.platform.common.utils.StringUtils.isNotEmpty(riskLevelId)) { + List ids = JsonUtil.toList(riskLevelId, String.class); + for (String id : ids) { + String s = HosptialHighRiskFacade.colorMap.get(id); + HashMap map = new HashMap <>(); + map.put("color", s); + map.put("id", id); + objects.add(map); + } + } + matdeliverFollowListResult.setHighRiskLevels(objects); + + List followModels = mongoTemplate.find(Query.query(Criteria.where("pid").is(patient.getPid())), MatdeliverFollowModel.class); + // 1-无人接听电话、2-拒绝访视、3-其他 + String contactReasonStr = ""; + if (CollectionUtils.isNotEmpty(followModels)) { + MatdeliverFollowModel model = followModels.get(followModels.size() - 1); + Integer contactReason = model.getContactReason(); + if (contactReason != null) { + contactReasonStr = PostpartumFollowMakeEnums.ContactReasonEnum.getTitle(contactReason); + } + //访视医生 + matdeliverFollowListResult.setVisitDoctor(CommonsHelper.getUserName(model.getVisitDoctor(), usersService)); + ; + } + matdeliverFollowListResult.setCauseFailure(contactReasonStr); + } + + matdeliverFollowListResult.setTaoCheng(isTaocheng); + + // 推送时间 + String pushTime = ""; + List deliverId = mongoTemplate.find(Query.query(Criteria.where("deliverId").is(deliverModel.getId())), MatdeliverFollowModel.class); + if (CollectionUtils.isNotEmpty(deliverId)) { + MatdeliverFollowModel model = deliverId.get(deliverId.size() - 1); + pushTime = DateUtil.getyyyy_MM_dd(model.getCreateDate()); + } + matdeliverFollowListResult.setPushTime(pushTime); + + data.add(matdeliverFollowListResult); + } + } else { + matDeliverQuery.setNeNullVisitDoctor(true); + List list = matDeliverService.aggregateOne(matDeliverQuery); + for (HashMap map : list) { + CjStatisticsResult cjStatisticsResult = new CjStatisticsResult(); + String dId = null; + Object id = map.get("_id"); + if (null != id) { + dId = id.toString(); + } else { + continue; + } + + cjStatisticsResult.setdId(dId); + cjStatisticsResult.setCount(map.get("count").toString()); + try { + if (null == dId) { + cjStatisticsResult.setdName("未知"); + } else { + Users users = usersService.getUsers(Integer.valueOf(dId)); + if (null != users) { + cjStatisticsResult.setdName(users.getName()); + } + } + } catch (Exception e) { + } + data.add(cjStatisticsResult); + } + Collections.sort(data, new CjStatisticsResult()); + } + return listResponse.setErrormsg("成功").setErrorcode(ErrorCodeConstants.SUCCESS).setData(data).setPageInfo(matDeliverQuery.getPageInfo()); + } + + /** * 分娩后随访列表数据 * * @param matdeliverFollowRequest @@ -2173,7 +2741,7 @@ public class MatDeliverFacade { matDeliverQuery.setYn(YnEnums.YES.getId()); //产后天数=当前时间-分娩时间 - if(matdeliverFollowRequest.getPostViewDay()>0){ + if(matdeliverFollowRequest.getPostViewDay() !=null && matdeliverFollowRequest.getPostViewDay()>0){ matdeliverFollowRequest.setBirthDate(DateUtil.getyyyy_MM_dd_hms(DateUtil.addDay(new Date(), -matdeliverFollowRequest.getPostViewDay()))); } 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 2dda53a..771a065 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 @@ -165,6 +165,14 @@ public class MatdeliverFollowFacade { return matDeliverFacade.postpartumDeliver(matdeliverFollowRequest); } + /** + *访视统计 + */ + public BaseResponse queryStatis(FsMatdeliverFollowRequest fsMatdeliverFollowRequest, Integer id) { + fsMatdeliverFollowRequest.setOperatorId(id); + fsMatdeliverFollowRequest.setIsArea("area"); + return matDeliverFacade.queryStatis(fsMatdeliverFollowRequest); + } /** * 新增或修改一条访视记录 diff --git a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/request/FsMatdeliverFollowRequest.java b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/request/FsMatdeliverFollowRequest.java new file mode 100644 index 0000000..4c8b4d2 --- /dev/null +++ b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/request/FsMatdeliverFollowRequest.java @@ -0,0 +1,523 @@ +package com.lyms.platform.operate.web.request; + +import java.util.Date; + +/** + * @auther yangfei + * @createTime 2017年11月21日 17时58分 + * @discription 随访列查询条件 + */ +public class FsMatdeliverFollowRequest extends BasePageQueryRequest{ + + //0 统计 1 类别 + private int type=0; + + //医生id + private String dId; + + /** + * 产后天数 + */ + private Integer postViewDay; + + /** + * 当前用户 + */ + private Integer operatorId; + /** + * @discription 查询号 + */ + private String queryNo; + /** + * 访视阶段 1-访视期内、2-超出访视期 + */ + private Integer followStage; + + /** + * 访视时间开始 + */ + private Date followStarDate; + /** + * 访视时间结束 + */ + private Date followEndDate; + + /** + * @discription 是否区域 + */ + private String isArea; + /** + * @discription 分娩日期 + */ + private String birthDate; + + //居住地 + private String provinceId; + private String cityId; + private String areaId; + private String streetId; + + /** + * @discription 分娩医院省 + */ + private String hospitalProvinceId; + + /** + * @discription 分娩医院市 + */ + private String hospitalCityId; + + /** + * @discription 分娩医院区县 + */ + private String hospitalAreaId; + + /** + * @discription 分娩医院id + */ + private String hospitalId; + + /** + * 预约联系结果(1-成功、2-失败) + */ + private Integer contactResult; + + /** + * 预约失败理由(1-无人接听电话、2-拒绝访视、3-其他) + */ + private Integer contactReason; + /** + * 访视状态(1-待访视、2-已访视) + */ + private Integer visitStatus; + /** + * 预约访视类型(1-上门访视、2-电话访视) + */ + private Integer makeType; + /** + * 访视结果(1-成功、2-失败) + */ + private Integer visitResult; + /** + * 产妇随访确认(1-待确认、2-已确认) + */ + private Integer visitAffirm; + /** + * 是否分页(导出不分页,普通分页) + */ + private String need; + + private String riskId; + private Integer startDay; + private Integer endDay; + + //访视机构 + private String fsHospitalId; + + /** + * 开始年龄段 + */ + private String startAge; + + /** + * 结束年龄段 + */ + private String endAge; + + /** + * 开始访视时间 + */ + private String fsStartTime; + + /** + * 结束访视时间 + */ + private String fsEndTime; + + /** + * 高危等级 + */ + private String highRiskLevel; + + private String startPushTime; + + private String endPushTime; + + /** + * 转介地 + */ + private String provinceZJId; + private String cityZJId; + private String areaZJId; + private String streetZJId; + + + //产后休养地址 + private String provincePostRestId; + private String cityPostRestId; + private String areaPostRestId; + private String streetPostRestId; + + //空表示查询的是原来的追访模式,即根据建档选择的访视机构来访视,1,市, 2 区 + private Integer flag; + + public int getType() { + return type; + } + + public void setType(int type) { + this.type = type; + } + + public String getdId() { + return dId; + } + + public void setdId(String dId) { + this.dId = dId; + } + + public Integer getPostViewDay() { + return postViewDay; + } + + public void setPostViewDay(Integer postViewDay) { + this.postViewDay = postViewDay; + } + + public String getStreetPostRestId() { + return streetPostRestId; + } + + public void setStreetPostRestId(String streetPostRestId) { + this.streetPostRestId = streetPostRestId; + } + + public String getProvincePostRestId() { + return provincePostRestId; + } + + public void setProvincePostRestId(String provincePostRestId) { + this.provincePostRestId = provincePostRestId; + } + + public String getCityPostRestId() { + return cityPostRestId; + } + + public void setCityPostRestId(String cityPostRestId) { + this.cityPostRestId = cityPostRestId; + } + + public Integer getFlag() { + return flag; + } + + public void setFlag(Integer flag) { + this.flag = flag; + } + + public String getAreaPostRestId() { + return areaPostRestId; + } + + public void setAreaPostRestId(String areaPostRestId) { + this.areaPostRestId = areaPostRestId; + } + + public String getProvinceZJId() { + return provinceZJId; + } + + public void setProvinceZJId(String provinceZJId) { + this.provinceZJId = provinceZJId; + } + + public String getCityZJId() { + return cityZJId; + } + + public void setCityZJId(String cityZJId) { + this.cityZJId = cityZJId; + } + + public String getAreaZJId() { + return areaZJId; + } + + public void setAreaZJId(String areaZJId) { + this.areaZJId = areaZJId; + } + + public String getStreetZJId() { + return streetZJId; + } + + public void setStreetZJId(String streetZJId) { + this.streetZJId = streetZJId; + } + + public String getStartPushTime() { + return startPushTime; + } + + public void setStartPushTime(String startPushTime) { + this.startPushTime = startPushTime; + } + + public String getEndPushTime() { + return endPushTime; + } + + public void setEndPushTime(String endPushTime) { + this.endPushTime = endPushTime; + } + + public String getStartAge() { + return startAge; + } + + public void setStartAge(String startAge) { + this.startAge = startAge; + } + + public String getEndAge() { + return endAge; + } + + public void setEndAge(String endAge) { + this.endAge = endAge; + } + + public String getFsStartTime() { + return fsStartTime; + } + + public void setFsStartTime(String fsStartTime) { + this.fsStartTime = fsStartTime; + } + + public String getFsEndTime() { + return fsEndTime; + } + + public void setFsEndTime(String fsEndTime) { + this.fsEndTime = fsEndTime; + } + + public String getHighRiskLevel() { + return highRiskLevel; + } + + public void setHighRiskLevel(String highRiskLevel) { + this.highRiskLevel = highRiskLevel; + } + + public String getFsHospitalId() { + return fsHospitalId; + } + + public void setFsHospitalId(String fsHospitalId) { + this.fsHospitalId = fsHospitalId; + } + + public String getRiskId() { + return riskId; + } + + public void setRiskId(String riskId) { + this.riskId = riskId; + } + + public Integer getStartDay() { + return startDay; + } + + public void setStartDay(Integer startDay) { + this.startDay = startDay; + } + + public Integer getEndDay() { + return endDay; + } + + public void setEndDay(Integer endDay) { + this.endDay = endDay; + } + + public Date getFollowStarDate() { + return followStarDate; + } + + public void setFollowStarDate(Date followStarDate) { + this.followStarDate = followStarDate; + } + + public Date getFollowEndDate() { + return followEndDate; + } + + public void setFollowEndDate(Date followEndDate) { + this.followEndDate = followEndDate; + } + + public Integer getFollowStage() { + return followStage; + } + + public void setFollowStage(Integer followStage) { + this.followStage = followStage; + } + + public Integer getMakeType() { + return makeType; + } + + public void setMakeType(Integer makeType) { + this.makeType = makeType; + } + + public String getNeed() { + return need; + } + + public void setNeed(String need) { + this.need = need; + } + + public String getProvinceId() { + return provinceId; + } + + public void setProvinceId(String provinceId) { + this.provinceId = provinceId; + } + + public String getCityId() { + return cityId; + } + + public void setCityId(String cityId) { + this.cityId = cityId; + } + + public String getAreaId() { + return areaId; + } + + public void setAreaId(String areaId) { + this.areaId = areaId; + } + + public String getStreetId() { + return streetId; + } + + public void setStreetId(String streetId) { + this.streetId = streetId; + } + + public Integer getVisitStatus() { + return visitStatus; + } + + public void setVisitStatus(Integer visitStatus) { + this.visitStatus = visitStatus; + } + + public Integer getOperatorId() { + return operatorId; + } + + public void setOperatorId(Integer operatorId) { + this.operatorId = operatorId; + } + + public String getQueryNo() { + return queryNo; + } + + public void setQueryNo(String queryNo) { + this.queryNo = queryNo; + } + + public String getBirthDate() { + return birthDate; + } + + public void setBirthDate(String birthDate) { + this.birthDate = birthDate; + } + + public String getIsArea() { + return isArea; + } + + public void setIsArea(String isArea) { + this.isArea = isArea; + } + + public String getHospitalProvinceId() { + return hospitalProvinceId; + } + + public void setHospitalProvinceId(String hospitalProvinceId) { + this.hospitalProvinceId = hospitalProvinceId; + } + + public String getHospitalCityId() { + return hospitalCityId; + } + + public void setHospitalCityId(String hospitalCityId) { + this.hospitalCityId = hospitalCityId; + } + + public String getHospitalAreaId() { + return hospitalAreaId; + } + + public void setHospitalAreaId(String hospitalAreaId) { + this.hospitalAreaId = hospitalAreaId; + } + + public String getHospitalId() { + return hospitalId; + } + + public void setHospitalId(String hospitalId) { + this.hospitalId = hospitalId; + } + + public Integer getContactResult() { + return contactResult; + } + + public void setContactResult(Integer contactResult) { + this.contactResult = contactResult; + } + + public Integer getContactReason() { + return contactReason; + } + + public void setContactReason(Integer contactReason) { + this.contactReason = contactReason; + } + + public Integer getVisitResult() { + return visitResult; + } + + public void setVisitResult(Integer visitResult) { + this.visitResult = visitResult; + } + + public Integer getVisitAffirm() { + return visitAffirm; + } + + public void setVisitAffirm(Integer visitAffirm) { + this.visitAffirm = visitAffirm; + } +}