diff --git a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/service/impl/BabyAfterVisitServiceImpl.java b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/service/impl/BabyAfterVisitServiceImpl.java index 0d6ccab..886d599 100644 --- a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/service/impl/BabyAfterVisitServiceImpl.java +++ b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/service/impl/BabyAfterVisitServiceImpl.java @@ -1,7 +1,7 @@ package com.lyms.platform.operate.web.service.impl; import com.google.common.util.concurrent.ThreadFactoryBuilder; -import com.lyms.platform.common.base.PageInfo; +import com.lyms.platform.biz.service.BabyBookbuildingService; import com.lyms.platform.common.constants.ErrorCodeConstants; import com.lyms.platform.common.enums.SexEnum; import com.lyms.platform.common.enums.TrackDownTransferEnums; @@ -28,10 +28,6 @@ import com.lyms.platform.pojo.*; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Sort; import org.springframework.data.mongodb.core.MongoTemplate; -import org.springframework.data.mongodb.core.aggregation.Aggregation; -import org.springframework.data.mongodb.core.aggregation.AggregationOperation; -import org.springframework.data.mongodb.core.aggregation.AggregationResults; -import org.springframework.data.mongodb.core.aggregation.MatchOperation; import org.springframework.data.mongodb.core.query.Criteria; import org.springframework.data.mongodb.core.query.Query; import org.springframework.data.mongodb.core.query.Update; @@ -62,6 +58,9 @@ public class BabyAfterVisitServiceImpl implements BabyAfterVisitService { @Autowired private AutoMatchFacade autoMatchFacade; + @Autowired + private BabyBookbuildingService babyBookbuildingService; + /** * 追访管理 - 追访列表 * @@ -161,78 +160,25 @@ public class BabyAfterVisitServiceImpl implements BabyAfterVisitService { Map map = new HashMap<>(); // 访视概况 - Integer statisticsModelsSize = getStatisticsModelsSize(babyId, afterVisitQuery, startDate, endDate, hospitalId); + Integer statisticsModelsSize = getStatisticsModelsSize(afterVisitQuery, startDate, endDate, hospitalId); map.put("statisticsModelsSize", statisticsModelsSize); - - // 档案转正 List infoModels = new ArrayList<>(); - setSyncAfterVisitInfoList(null, infoModels, afterVisitQuery, TYPE_BUILD, startDate, endDate, hospitalId); + setSyncAfterVisitInfoList( infoModels, afterVisitQuery, TYPE_BUILD, startDate, endDate, hospitalId); mongoTemplate.insert(infoModels, BabyAfterVisitInfoModel.class); map.put("infoModels-build", infoModels.size()); - // 儿保检查 ( 已建档未做儿保检查) + // 儿保检查 List ids = new ArrayList<>(); List infoCheckModels = new ArrayList<>(); - - /* Query query = new Query(); - query.addCriteria(Criteria.where("created").gte(startDate).lt(endDate)); - query.addCriteria(Criteria.where("yn").is(1)); - List babyModels = mongoTemplate.find(query, BabyModel.class); - for (BabyModel model : babyModels) { - String modelId = model.getId(); - ids.add(modelId); - }*/ - - - setSyncAfterVisitInfoList(ids, infoCheckModels, afterVisitQuery, TYPE_CHECK, startDate, endDate, hospitalId); + setSyncAfterVisitInfoList(infoCheckModels, afterVisitQuery, TYPE_CHECK, startDate, endDate, hospitalId); mongoTemplate.insert(infoCheckModels, BabyAfterVisitInfoModel.class); map.put("infoModels-check-size", infoCheckModels.size()); - - - // 眼保检查 - List babyIds = new ArrayList<>(); List infoEyeCheckModels = new ArrayList<>(); - /* Query eyeQuery = new Query(); - eyeQuery.addCriteria(Criteria.where("created").gte(startDate).lt(endDate)); - eyeQuery.addCriteria(Criteria.where("yn").is(1)); - List eyeBabyModels = mongoTemplate.find(eyeQuery, BabyModel.class); - for (BabyModel babyModel : eyeBabyModels) { - String babyModelId = babyModel.getId(); - boolean exists = mongoTemplate.exists(Query.query(Criteria.where(BABY_ID).is(babyModelId)), BabyEyeCheck.class); - if (!exists) { - babyIds.add(babyModel.getId()); - } - }*/ - // sysdate < 下次预约时间 已做眼保检查 and 下次预约时间 == null - /* MatchOperation eyeMatch = Aggregation.match(Criteria.where("created").gte(startDate).lt(endDate)); - AggregationOperation eyeGroup = Aggregation.group(BABY_ID).max("created").as("created").addToSet("id").as("babyEyeCheckIds"); - Aggregation eyeAggregation = Aggregation.newAggregation(eyeMatch, eyeGroup); - AggregationResults eyeAggregate = mongoTemplate.aggregate(eyeAggregation, BabyEyeCheck.class, Map.class); - List eyeMappedResults = eyeAggregate.getMappedResults(); - for (Map mappedResult : eyeMappedResults) { - List babyEyeCheckIds = (List) mappedResult.get("babyEyeCheckIds"); - Object babyEyeCheckId = babyEyeCheckIds.get(babyEyeCheckIds.size() - 1); - BabyEyeCheck babyEyeCheck = mongoTemplate.findOne(Query.query(Criteria.where("_id").is(babyEyeCheckId). - orOperator(Criteria.where("nextCheckTime").gt(new Date()), Criteria.where("nextCheckTime").exists(false))), BabyEyeCheck.class); - if (null != babyEyeCheck) { - String eyeCheckBabyId = babyEyeCheck.getBabyId(); - boolean contains = babyIds.contains(eyeCheckBabyId); - if (!contains) { - babyIds.add(eyeCheckBabyId); - } - } - }*/ - - /* List modelsEye = mongoTemplate.find(Query.query(Criteria.where("_id").nin(babyIds).and("hospitalId").is(hospitalId).and("yn").is(1)), BabyModel.class); - if (models != null) { - babyIds.add(modelsEye.get(0).getId()); - }*/ - - setSyncAfterVisitInfoList(babyIds, infoEyeCheckModels, afterVisitQuery, TYPE_EYE_CHECK, startDate, endDate, hospitalId); + setSyncAfterVisitInfoList(infoEyeCheckModels, afterVisitQuery, TYPE_EYE_CHECK, startDate, endDate, hospitalId); mongoTemplate.insert(infoEyeCheckModels, BabyAfterVisitInfoModel.class); map.put("infoModels-eyeCheck-size", infoEyeCheckModels.size()); @@ -245,7 +191,6 @@ public class BabyAfterVisitServiceImpl implements BabyAfterVisitService { /** * 获取已同步到访视概况的总数量 * - * @param babyId * @param afterVisitQuery * @param startDate * @param endDate @@ -253,27 +198,12 @@ public class BabyAfterVisitServiceImpl implements BabyAfterVisitService { * @throws InterruptedException * @throws ExecutionException */ - private Integer getStatisticsModelsSize(String babyId, BabyAfterVisitRequest afterVisitQuery, Date startDate, Date endDate, String hospitalId) throws InterruptedException, ExecutionException { + private Integer getStatisticsModelsSize(BabyAfterVisitRequest afterVisitQuery, Date startDate, Date endDate, String hospitalId) throws InterruptedException, ExecutionException { List statisticsModels = new LinkedList<>(); - if (StringUtils.isNotEmpty(babyId)) { - // 单条数据,方便测试 - Query query = Query.query(Criteria.where("_id").is(babyId).and("created").gte(startDate).lte(endDate)); - if (StringUtils.isNotEmpty(hospitalId)) { - query.addCriteria(Criteria.where("hospitalId").is(hospitalId)); - } - BabyModel babyModel = mongoTemplate.findOne(query, BabyModel.class); - if (babyModel != null) { - List babyModelList = new ArrayList<>(); - babyModelList.add(babyModel); - ExecutorService service = Executors.newSingleThreadExecutor(); - Future> listFuture = service.submit(new BabyAfterVisitStatisticsModelWork(babyModelList, mongoTemplate, screenMapper)); - statisticsModels = listFuture.get(); - } - } else { - // 递归获取要同步的数据集 - setSyncList(statisticsModels, afterVisitQuery, startDate, endDate, hospitalId); - } + // 递归获取要同步的数据集 + setSyncList(statisticsModels, afterVisitQuery, startDate, endDate, hospitalId); + // 批量保存 mongoTemplate.insert(statisticsModels, BabyAfterVisitStatisticsModel.class); @@ -587,7 +517,6 @@ public class BabyAfterVisitServiceImpl implements BabyAfterVisitService { /** * 递归获取预约建档的儿童信息 * - * @param ids 建档ids - 针对儿保检查 * @param infoModels 接受的集合 * @param afterVisitQuery query对象 * @param type 类型 @@ -596,14 +525,13 @@ public class BabyAfterVisitServiceImpl implements BabyAfterVisitService { * @throws ExecutionException * @throws InterruptedException */ - private void setSyncAfterVisitInfoList(List ids, List infoModels, BabyAfterVisitRequest afterVisitQuery, Integer type, Date startDate, Date endDate, String hospitalId) + private void setSyncAfterVisitInfoList(List infoModels, BabyAfterVisitRequest afterVisitQuery, Integer type, Date startDate, Date endDate, String hospitalId) throws ExecutionException, InterruptedException { Query query = new Query(); - query.addCriteria(Criteria.where("created").gte(startDate).lte(endDate)); + query.addCriteria(Criteria.where("buildDate").gte(startDate).lte(endDate)); if (StringUtils.isNotEmpty(hospitalId)) { query.addCriteria(Criteria.where("hospitalId").is(hospitalId)); } - long count = 0L; if (Objects.equals(TYPE_BUILD, type)) { // 档案转正 @@ -612,23 +540,17 @@ public class BabyAfterVisitServiceImpl implements BabyAfterVisitService { // 儿保检查 query.addCriteria(Criteria.where("yn").is(1)); - query.addCriteria(Criteria.where("dataStatus").ne(1)); query.addCriteria(new Criteria().orOperator(Criteria.where("buildType").is(3).and("enable").is("1"), Criteria.where("buildType").in(new ArrayList(){{add(1);add(2);}}))); } else if (Objects.equals(TYPE_EYE_CHECK, type)) { // 眼保检查 query.addCriteria(Criteria.where("yn").is(1)); - query.addCriteria(Criteria.where("dataStatus").ne(1)); query.addCriteria(new Criteria().orOperator(Criteria.where("buildType").is(3).and("enable").is("1"), Criteria.where("buildType").in(new ArrayList(){{add(1);add(2);}}))); } else if (4 == type) { // TODO 2019/7/2 14:36 dongqing 听力筛查 } - count = mongoTemplate.count(query, BabyModel.class); - afterVisitQuery.mysqlBuild((int) count); - query.skip(afterVisitQuery.getOffset()).limit(afterVisitQuery.getLimit()); - query.with(new Sort(new Sort.Order(Sort.Direction.DESC, "created"))); List models = mongoTemplate.find(query, BabyModel.class); @@ -658,26 +580,6 @@ public class BabyAfterVisitServiceImpl implements BabyAfterVisitService { System.out.println("当前查询数 - build ====>" + infoModels.size()); } } - - PageInfo pageInfo = afterVisitQuery.getPageInfo(); - Integer lastPage = pageInfo.getLastPage(); - Integer currentPage = pageInfo.getPage(); - if (Objects.equals(lastPage, currentPage)) { - return; - } - for (int i = currentPage + 1; i <= lastPage; i++) { - afterVisitQuery.setPage(i); - if (TYPE_BUILD.equals(type)) { - setSyncAfterVisitInfoList(null, infoModels, afterVisitQuery, type, startDate, endDate, hospitalId); - } - if (TYPE_CHECK.equals(type)) { - setSyncAfterVisitInfoList(ids, infoModels, afterVisitQuery, type, startDate, endDate, hospitalId); - } - if (TYPE_EYE_CHECK.equals(type)) { - setSyncAfterVisitInfoList(ids, infoModels, afterVisitQuery, type, startDate, endDate, hospitalId); - } - - } } /** @@ -689,15 +591,23 @@ public class BabyAfterVisitServiceImpl implements BabyAfterVisitService { private void setSyncList(List statisticsModels, BabyAfterVisitRequest afterVisitQuery, Date startDate, Date endDate, String hospitalId) throws ExecutionException, InterruptedException { Query query = new Query(); - query.addCriteria(Criteria.where("created").gte(startDate).lte(endDate)); + query.addCriteria(Criteria.where("buildDate").gte(startDate).lte(endDate)); query.addCriteria(new Criteria().orOperator(Criteria.where("buildType").is(3).and("enable").is("1"), Criteria.where("buildType").in(new ArrayList(){{add(1);add(2);}}))); if (StringUtils.isNotEmpty(hospitalId)) { query.addCriteria(Criteria.where("hospitalId").is(hospitalId)); } - long count = mongoTemplate.count(query, BabyModel.class); - afterVisitQuery.mysqlBuild((int) count); - query.with(new Sort(new Sort.Order(Sort.Direction.DESC, "created"))); - query.skip(afterVisitQuery.getOffset()).limit(afterVisitQuery.getLimit()); + + /*BabyModelQuery babyModelQuery = new BabyModelQuery(); + babyModelQuery.setDataStatus(true); + babyModelQuery.setYn(YnEnums.YES.getId()); + babyModelQuery.setBuildDateStart(startDate); + babyModelQuery.setBuildDateEnd(endDate); + babyModelQuery.setHospitalId(hospitalId); + babyModelQuery.setBuildTypeList(new ArrayList(){{add(1);add(2);}}); + List models = babyBookbuildingService.queryBabyBuildByCond(babyModelQuery, "created", Sort.Direction.DESC); + + + Query query1 = babyModelQuery.convertToQuery().convertToMongoQuery();*/ List babyModels = mongoTemplate.find(query, BabyModel.class); ThreadFactory threadFactory = new ThreadFactoryBuilder().setNameFormat("sync-pool-%d").build(); @@ -719,15 +629,14 @@ public class BabyAfterVisitServiceImpl implements BabyAfterVisitService { if (end > size) { end = size; } - Future> listFuture = service.submit(new BabyAfterVisitStatisticsModelWork(babyModels.subList(i, end), mongoTemplate, screenMapper)); + Future> listFuture = service.submit(new BabyAfterVisitStatisticsModelWork(babyModels.subList(i, end), mongoTemplate, screenMapper, true)); List visitStatisticsModels = listFuture.get(); if (CollectionUtils.isNotEmpty(visitStatisticsModels)) { statisticsModels.addAll(visitStatisticsModels); - System.out.println("当前查询数====>" + statisticsModels.size()); } } - PageInfo pageInfo = afterVisitQuery.getPageInfo(); + /* PageInfo pageInfo = afterVisitQuery.getPageInfo(); Integer lastPage = pageInfo.getLastPage(); Integer currentPage = pageInfo.getPage(); if (Objects.equals(lastPage, currentPage)) { @@ -736,7 +645,7 @@ public class BabyAfterVisitServiceImpl implements BabyAfterVisitService { for (int i = currentPage + 1; i <= lastPage; i++) { afterVisitQuery.setPage(i); setSyncList(statisticsModels, afterVisitQuery, startDate, endDate, hospitalId); - } + }*/ } @@ -781,7 +690,7 @@ public class BabyAfterVisitServiceImpl implements BabyAfterVisitService { mongoTemplate.updateFirst(query, Update.update("highRiskType", STATUS_TYPE_BUILD), BabyAfterVisitStatisticsModel.class); } else { // 新增数据 - Future> listFuture = service.submit(new BabyAfterVisitStatisticsModelWork(models, mongoTemplate, screenMapper)); + Future> listFuture = service.submit(new BabyAfterVisitStatisticsModelWork(models, mongoTemplate, screenMapper, false)); List statisticsModels = listFuture.get(); mongoTemplate.insert(statisticsModels, BabyAfterVisitStatisticsModel.class); } @@ -789,7 +698,7 @@ public class BabyAfterVisitServiceImpl implements BabyAfterVisitService { // 预建档/临时建档 if (Objects.equals(STATUS_TYPE_TEMPORARY_DOCUMENT, statusType)) { // 新增数据 - Future> listFuture = service.submit(new BabyAfterVisitStatisticsModelWork(models, mongoTemplate, screenMapper)); + Future> listFuture = service.submit(new BabyAfterVisitStatisticsModelWork(models, mongoTemplate, screenMapper, false)); List statisticsModels = listFuture.get(); mongoTemplate.insert(statisticsModels, BabyAfterVisitStatisticsModel.class); } diff --git a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/worker/BabyAfterVisitStatisticsModelWork.java b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/worker/BabyAfterVisitStatisticsModelWork.java index 5ae71d2..068ebd0 100644 --- a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/worker/BabyAfterVisitStatisticsModelWork.java +++ b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/worker/BabyAfterVisitStatisticsModelWork.java @@ -27,12 +27,14 @@ public class BabyAfterVisitStatisticsModelWork implements Callable babyModels; + private boolean syncData; public BabyAfterVisitStatisticsModelWork(final List babyModels, final MongoTemplate mongoTemplate, - final BabyPatientExtendEarScreenMapper screenMapper) { + final BabyPatientExtendEarScreenMapper screenMapper, final boolean syncData) { this.babyModels = babyModels; this.mongoTemplate = mongoTemplate; this.screenMapper = screenMapper; + this.syncData = syncData; } @@ -53,7 +55,7 @@ public class BabyAfterVisitStatisticsModelWork implements Callable