From 42cb87a58087b046bff238a9724fe739d54ba7b4 Mon Sep 17 00:00:00 2001 From: dongqin <123456> Date: Mon, 8 Jul 2019 17:34:40 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=9E=E6=97=B6=E6=B7=BB=E5=8A=A0=E8=BF=BD?= =?UTF-8?q?=E8=AE=BF=E8=AE=B0=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pojo/BabyAfterVisitInfoDetailModel.java | 10 + .../platform/pojo/BabyAfterVisitInfoModel.java | 12 +- .../web/controller/BabyAfterVisitController.java | 2 +- .../operate/web/service/BabyAfterVisitService.java | 9 + .../service/impl/BabyAfterVisitServiceImpl.java | 380 +++++++++++++++++---- .../web/worker/BabyAfterVisitInfoModelWork.java | 7 - 6 files changed, 349 insertions(+), 71 deletions(-) diff --git a/platform-dal/src/main/java/com/lyms/platform/pojo/BabyAfterVisitInfoDetailModel.java b/platform-dal/src/main/java/com/lyms/platform/pojo/BabyAfterVisitInfoDetailModel.java index d9ee3d0..7389a3b 100644 --- a/platform-dal/src/main/java/com/lyms/platform/pojo/BabyAfterVisitInfoDetailModel.java +++ b/platform-dal/src/main/java/com/lyms/platform/pojo/BabyAfterVisitInfoDetailModel.java @@ -83,6 +83,16 @@ public class BabyAfterVisitInfoDetailModel extends BaseModel { */ private Integer yn; + private String hospitalId; + + public String getHospitalId() { + return hospitalId; + } + + public void setHospitalId(String hospitalId) { + this.hospitalId = hospitalId; + } + public Integer getYn() { return yn; } diff --git a/platform-dal/src/main/java/com/lyms/platform/pojo/BabyAfterVisitInfoModel.java b/platform-dal/src/main/java/com/lyms/platform/pojo/BabyAfterVisitInfoModel.java index e7b429f..4ddf842 100644 --- a/platform-dal/src/main/java/com/lyms/platform/pojo/BabyAfterVisitInfoModel.java +++ b/platform-dal/src/main/java/com/lyms/platform/pojo/BabyAfterVisitInfoModel.java @@ -4,7 +4,6 @@ import com.lyms.platform.common.result.BaseModel; import org.springframework.data.mongodb.core.mapping.Document; import java.util.Date; -import java.util.List; /** * @@ -80,7 +79,7 @@ public class BabyAfterVisitInfoModel extends BaseModel { private String afterVisitUser; /** - * 追访方式 + * 追访方式 1-电话追访 2-上门追访 3-短信追访 4-app追访 */ private String afterVisitWay; @@ -145,8 +144,17 @@ public class BabyAfterVisitInfoModel extends BaseModel { */ private String riskFactors; + private String hospitalId; + // TODO 2019/6/29 15:55 dongqing 参数未完 + public String getHospitalId() { + return hospitalId; + } + + public void setHospitalId(String hospitalId) { + this.hospitalId = hospitalId; + } public String getDiagnosisMonths() { return diagnosisMonths; diff --git a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/controller/BabyAfterVisitController.java b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/controller/BabyAfterVisitController.java index 86aecb5..d3454c9 100644 --- a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/controller/BabyAfterVisitController.java +++ b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/controller/BabyAfterVisitController.java @@ -64,7 +64,7 @@ public class BabyAfterVisitController extends BaseController { } /** - * 档案转正列表 + * 档案转正/儿保检查/眼保检查/听力筛查 - 列表 * * @param request * @return diff --git a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/service/BabyAfterVisitService.java b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/service/BabyAfterVisitService.java index 027fb63..bf707a4 100644 --- a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/service/BabyAfterVisitService.java +++ b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/service/BabyAfterVisitService.java @@ -7,6 +7,9 @@ import com.lyms.platform.operate.web.request.BabyAfterVisitBuildListRequest; import com.lyms.platform.operate.web.request.BabyAfterVisitInfoDetailListRequest; import com.lyms.platform.operate.web.request.BabyAfterVisitInfoDetailRequest; import com.lyms.platform.operate.web.request.BabyAfterVisitRequest; +import com.lyms.platform.operate.web.service.impl.BabyAfterVisitServiceImpl; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import java.lang.reflect.InvocationTargetException; import java.util.concurrent.ExecutionException; @@ -35,12 +38,18 @@ public interface BabyAfterVisitService { public static final Integer STATUS_TYPE_TEMPORARY_DOCUMENT = 4; /**状态:正式建档/已建档*/ public static final Integer STATUS_TYPE_BUILD= 1; + /**标识:儿保检查*/ + public static final Integer STATUS_TYPE_CHECK= 5; + /**标识:眼保检查*/ + public static final Integer STATUS_TYPE_EYE_CHECK= 6; public static final String BABY_ID = "babyId"; public static final String POSITIVE_PROJECT_TYPE = "yang"; public static ExpiryMap cacheMap = new ExpiryMap(1000 * 60 * 60 * 7); + Logger logger = LoggerFactory.getLogger(BabyAfterVisitServiceImpl.class); + /** * 追访管理 - 追访列表 * 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 3cbe90f..27e1b2d 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 @@ -5,6 +5,8 @@ import com.lyms.platform.common.base.PageInfo; import com.lyms.platform.common.constants.ErrorCodeConstants; import com.lyms.platform.common.enums.SexEnum; import com.lyms.platform.common.enums.TrackDownTransferEnums; +import com.lyms.platform.common.enums.YnEnums; +import com.lyms.platform.common.exception.BusinessException; import com.lyms.platform.common.result.BaseListResponse; import com.lyms.platform.common.result.BaseModel; import com.lyms.platform.common.result.BaseResponse; @@ -21,13 +23,13 @@ import com.lyms.platform.permission.dao.master.BabyPatientExtendEarScreenMapper; import com.lyms.platform.permission.dao.master.MasterUsersMapper; import com.lyms.platform.permission.model.Users; import com.lyms.platform.pojo.*; -import org.apache.log4j.Logger; 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; @@ -46,8 +48,6 @@ import java.util.regex.Pattern; @Service public class BabyAfterVisitServiceImpl implements BabyAfterVisitService { - private Logger logger = Logger.getLogger(this.getClass()); - @Autowired private MongoTemplate mongoTemplate; @@ -157,40 +157,37 @@ public class BabyAfterVisitServiceImpl implements BabyAfterVisitService { // 儿保检查 ( 已建档未做儿保检查) List ids = new ArrayList<>(); List infoCheckModels = new ArrayList<>(); - Object object = cacheMap.get("buildId"); - if (null != object) { - ids = (List) object; - } else { - Query query = new Query(); - query.addCriteria(Criteria.where("yn").ne(0).and("dataStatus").ne(1)); - query.addCriteria(Criteria.where("nextDate").exists(false).and("weakSon").exists(false).and("highRisk").exists(false)); - List babyModels = mongoTemplate.find(query, BabyModel.class); - for (BabyModel model : babyModels) { - String modelId = model.getId(); - ids.add(modelId); - } - // 儿保 (sysdate < 下次预约时间) or ( 已做儿保检查 and 下次预约时间 == null) - AggregationOperation group = Aggregation.group("buildId").max("created").as("created").addToSet("id").as("babyCheckIds"); - Aggregation aggregation = Aggregation.newAggregation(group); - AggregationResults aggregate = mongoTemplate.aggregate(aggregation, BabyCheckModel.class, Map.class); - List mappedResults = aggregate.getMappedResults(); - for (Map mappedResult : mappedResults) { - List babyCheckIds = (List) mappedResult.get("babyCheckIds"); - // 根据建档id分组,获取最新的儿保检查数据 - Object babyCheckId = babyCheckIds.get(babyCheckIds.size() - 1); - BabyCheckModel babyCheckModel = mongoTemplate.findOne(Query.query(Criteria.where("_id").is(babyCheckId).orOperator(Criteria.where("nextDate").gte(new Date()), Criteria.where("nextDate").exists(false))), BabyCheckModel.class); - if (null != babyCheckModel) { - String buildId = babyCheckModel.getBuildId(); - boolean contains = ids.contains(babyId); - if (!contains) { - ids.add(buildId); - } + Query query = new Query(); + query.addCriteria(Criteria.where("created").gte(startDate).lt(endDate)); + query.addCriteria(Criteria.where("yn").ne(0).and("dataStatus").ne(1)); + query.addCriteria(Criteria.where("nextDate").exists(false).and("weakSon").exists(false).and("highRisk").exists(false)); + List babyModels = mongoTemplate.find(query, BabyModel.class); + for (BabyModel model : babyModels) { + String modelId = model.getId(); + ids.add(modelId); + } + + // 儿保 (sysdate < 下次预约时间) or ( 已做儿保检查 and 下次预约时间 == null) + MatchOperation match = Aggregation.match(Criteria.where("created").gte(startDate).lt(endDate)); + AggregationOperation group = Aggregation.group("buildId").max("created").as("created").addToSet("id").as("babyCheckIds"); + Aggregation aggregation = Aggregation.newAggregation(match ,group); + AggregationResults aggregate = mongoTemplate.aggregate(aggregation, BabyCheckModel.class, Map.class); + List mappedResults = aggregate.getMappedResults(); + for (Map mappedResult : mappedResults) { + List babyCheckIds = (List) mappedResult.get("babyCheckIds"); + // 根据建档id分组,获取最新的儿保检查数据 + Object babyCheckId = babyCheckIds.get(babyCheckIds.size() - 1); + BabyCheckModel babyCheckModel = mongoTemplate.findOne(Query.query(Criteria.where("_id").is(babyCheckId).orOperator(Criteria.where("nextDate").gte(new Date()), + Criteria.where("nextDate").exists(false))), BabyCheckModel.class); + if (null != babyCheckModel) { + String buildId = babyCheckModel.getBuildId(); + boolean contains = ids.contains(babyId); + if (!contains) { + ids.add(buildId); } } - cacheMap.put("buildId", ids); } - setSyncAfterVisitInfoList( ids, infoCheckModels, afterVisitQuery, TYPE_CHECK, startDate, endDate); mongoTemplate.insert(infoCheckModels, BabyAfterVisitInfoModel.class); map.put("infoModels-check-size", infoCheckModels.size()); @@ -198,7 +195,8 @@ public class BabyAfterVisitServiceImpl implements BabyAfterVisitService { // 眼保检查 List infoEyeCheckModels = new ArrayList<>(); Query eyeQuery = new Query(); - eyeQuery.addCriteria(Criteria.where("yn").ne(0).and("dataStatus").ne(1).and("created").gte(startDate).lte(endDate)); + eyeQuery.addCriteria(Criteria.where("created").gte(startDate).lt(endDate)); + eyeQuery.addCriteria(Criteria.where("yn").ne(0).and("dataStatus").ne(1)); List eyeBabyModels = mongoTemplate.find(eyeQuery, BabyModel.class); List babyIds = new ArrayList<>(); for (BabyModel babyModel : eyeBabyModels) { @@ -209,11 +207,12 @@ public class BabyAfterVisitServiceImpl implements BabyAfterVisitService { } } // sysdate < 下次预约时间 已做眼保检查 and 下次预约时间 == null - AggregationOperation group = Aggregation.group(BABY_ID).max("created").as("created").addToSet("id").as("babyEyeCheckIds"); - Aggregation aggregation = Aggregation.newAggregation(group); - AggregationResults aggregate = mongoTemplate.aggregate(aggregation, BabyEyeCheck.class, Map.class); - List mappedResults = aggregate.getMappedResults(); - for (Map mappedResult : mappedResults) { + 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). @@ -231,7 +230,7 @@ public class BabyAfterVisitServiceImpl implements BabyAfterVisitService { mongoTemplate.insert(infoEyeCheckModels, BabyAfterVisitInfoModel.class); map.put("infoModels-eyeCheck-size", infoEyeCheckModels.size()); - // TODO 2019/7/5 11:48 dongqing 听力筛查, 郝总都不知道需求是怎么样的 + // TODO 2019/7/2 11:48 dongqing 听力筛查, 郝总都不知道需求是怎么样的 response.setObject(map); return response; @@ -281,8 +280,13 @@ public class BabyAfterVisitServiceImpl implements BabyAfterVisitService { */ @Override public BaseResponse getBuildListPage(BabyAfterVisitBuildListRequest request) { - Query query = new Query(); String type = request.getType(); + boolean isOk = checkOverdueDataByType(type); + if (!isOk) { + return new BaseResponse("检查逾期数据异常", ErrorCodeConstants.SYSTEM_ERROR); + } + + Query query = new Query(); if (Objects.isNull(type)) { return new BaseResponse("参数缺失", ErrorCodeConstants.PARAMETER_ERROR); } @@ -412,7 +416,6 @@ public class BabyAfterVisitServiceImpl implements BabyAfterVisitService { query.addCriteria(Criteria.where("positiveProject").regex(pattern)); } - // 组装分页query long count = mongoTemplate.count(query, BabyAfterVisitInfoModel.class); request.mysqlBuild((int) count); @@ -424,11 +427,54 @@ public class BabyAfterVisitServiceImpl implements BabyAfterVisitService { Map objectMap = BeanUtils.objectToObjectMap(model); objectMap.put("sexStr", SexEnum.getTextById(model.getSex())); objectMap.put("birthStr", DateUtil.getyyyy_MM_dd(model.getBirth())); - objectMap.put("appointmentTimeStr", DateUtil.getyyyy_MM_dd(model.getAppointmentTime())); objectMap.put("monthsAge", DateUtil.getBabyMonthAge(model.getBirth(), new Date())); objectMap.put("mphone",model.getMphone().replaceAll("(\\d{3})\\d{4}(\\d{4})", "$1****$2")); - mapList.add(objectMap); + // 预约时间 + Date appointmentTime = model.getAppointmentTime(); + if (appointmentTime != null) { + objectMap.put("appointmentTimeStr", DateUtil.getyyyy_MM_dd(appointmentTime)); + } + + // 追访时间 + Date afterVisitTime = model.getAfterVisitTime(); + if (afterVisitTime != null) { + objectMap.put("afterVisitTimeStr", DateUtil.getyyyy_MM_dd(afterVisitTime)); + } + // 追访人 + String afterVisitUser = model.getAfterVisitUser(); + if (StringUtils.isNotEmpty(afterVisitUser)) { + Users users = usersMapper.getUsers(Integer.parseInt(afterVisitUser)); + if (users != null) { + objectMap.put("afterVisitUserStr", users.getName()); + } + } + // 阳性项目 + String positives = model.getPositiveProject(); + if (StringUtils.isNotEmpty(positives)) { + objectMap.put("positiveProjectStr", positives); + } + // 检查医生 + String doctor = model.getCheckDoctor(); + if (StringUtils.isNotEmpty(doctor)) { + Users users = usersMapper.getUsers(Integer.parseInt(doctor)); + if (users != null) { + objectMap.put("checkDoctorStr", users.getName()); + } + } + // 检查日期 + Date checkTime = model.getCheckTime(); + if (checkTime != null) { + objectMap.put("checkTimeStr", DateUtil.getyyyy_MM_dd(checkTime)); + } + // 诊断时间 + Date diagnosisTime = model.getDiagnosisTime(); + if (diagnosisTime != null) { + objectMap.put("diagnosisTimeStr", DateUtil.getyyyy_MM_dd(diagnosisTime)); + } + + + mapList.add(objectMap); } baseListResponse.setPageInfo(request.getPageInfo()); @@ -437,6 +483,91 @@ public class BabyAfterVisitServiceImpl implements BabyAfterVisitService { } /** + * 检查预约时间是否存在已逾期,若是则添加到追访表中 + * @param type 类型 + * @return + */ + private boolean checkOverdueDataByType(String type) { + try { + Class infoModelClass = BabyAfterVisitInfoModel.class; + if (TYPE_CHECK.equals(type)) { + // 儿保检查 + Class checkModelClass = BabyCheckModel.class; + List babyCheckModels = mongoTemplate.find(Query.query(Criteria.where("nextDate").gt(new Date()).and("yn").is(YnEnums.YES.getId())), checkModelClass); + List models = new ArrayList<>(1024); + if (CollectionUtils.isNotEmpty(babyCheckModels)) { + for (BabyCheckModel model : babyCheckModels) { + String buildId = model.getBuildId(); + boolean exists = mongoTemplate.exists(Query.query(Criteria.where(BABY_ID).is(buildId).and(type).is(type)), infoModelClass); + if (!exists) { + BabyAfterVisitInfoModel infoModel = getBabyAfterVisitInfoModel(type, model, buildId); + models.add(infoModel); + } + } + if (babyCheckModels.size() > 0) { + mongoTemplate.insert(models, infoModelClass); + } + } + } + if (TYPE_EYE_CHECK.equals(type)) { + // 眼保检查 + Class eyeCheckClass = BabyEyeCheck.class; + List babyCheckModels = mongoTemplate.find(Query.query(Criteria.where("nextCheckTime").gt(new Date()).and("yn").is(YnEnums.YES.getId())), eyeCheckClass); + List models = new ArrayList<>(1024); + if (CollectionUtils.isNotEmpty(babyCheckModels)) { + for (BabyEyeCheck model : babyCheckModels) { + String buildId = model.getBabyId(); + boolean exists = mongoTemplate.exists(Query.query(Criteria.where(BABY_ID).is(buildId).and(type).is(type)), infoModelClass); + if (!exists) { + BabyAfterVisitInfoModel infoModel = getBabyAfterVisitInfoModel(type, model, buildId); + models.add(infoModel); + } + } + if (babyCheckModels.size() > 0) { + mongoTemplate.insert(models, infoModelClass); + } + } + } + return true; + } catch (Exception e) { + logger.error("检查预约时间是否存在已逾期 异常", e.getStackTrace()); + return false; + } + + } + + /** + * 获取 BabyAfterVisitInfoModel 实体类 + * @param type + * @param model + * @param buildId + * @return + */ + private BabyAfterVisitInfoModel getBabyAfterVisitInfoModel(String type, BaseModel model, String buildId) { + BabyAfterVisitInfoModel infoModel = new BabyAfterVisitInfoModel(); + if (model instanceof BabyCheckModel) { + BabyCheckModel checkModel = (BabyCheckModel) model; + BeanUtils.copy(checkModel, infoModel); + BabyModel babyModel = mongoTemplate.findOne(Query.query(Criteria.where("_id").is(buildId)), BabyModel.class); + BeanUtils.copy(babyModel, infoModel); + infoModel.setAppointmentTime(checkModel.getNextDate()); + } + if (model instanceof BabyEyeCheck) { + BabyEyeCheck eyeCheck = (BabyEyeCheck) model; + BeanUtils.copy(eyeCheck, infoModel); + BabyModel babyModel = mongoTemplate.findOne(Query.query(Criteria.where("_id").is(buildId)), BabyModel.class); + BeanUtils.copy(babyModel, infoModel); + infoModel.setAppointmentTime(eyeCheck.getNextCheckTime()); + } + infoModel.setType(type); + infoModel.setCreateTime(new Date()); + infoModel.setYn(STATUS_TYPE_YES); + infoModel.setBabyId(buildId); + infoModel.setId(null); + return infoModel; + } + + /** * 递归获取预约建档的儿童信息 * * @param ids 建档ids - 针对儿保检查 @@ -448,7 +579,8 @@ public class BabyAfterVisitServiceImpl implements BabyAfterVisitService { * @throws ExecutionException * @throws InterruptedException */ - private void setSyncAfterVisitInfoList(List ids , List infoModels, BabyAfterVisitRequest afterVisitQuery, Integer type, Date startDate, Date endDate) throws ExecutionException, InterruptedException { + private void setSyncAfterVisitInfoList(List ids , List infoModels, BabyAfterVisitRequest afterVisitQuery, Integer type, Date startDate, Date endDate) + throws ExecutionException, InterruptedException { Query query = new Query(); query.addCriteria(Criteria.where("created").gte(startDate).lte(endDate)); long count = 0L; @@ -581,7 +713,10 @@ public class BabyAfterVisitServiceImpl implements BabyAfterVisitService { /** - * 在产妇分娩(MatDeliverFacade)、儿童建档(BabyBookbuildingFacade)、儿保检查保存(BabyCheckFacade)、眼保检查(BabyEyeCheckServiceImpl) + * 在产妇分娩(MatDeliverFacade)、 + * 儿童建档(BabyBookbuildingFacade)、 + * 儿保检查保存(BabyCheckFacade)、 + * 眼保检查(BabyEyeCheckServiceImpl) * * @param model BabyAfterVisitStatisticsModel or BabyAfterVisitInfoModel * @param type 0-追访概况、1-档案转正、2-儿保检查、3-眼保检查 @@ -599,14 +734,15 @@ public class BabyAfterVisitServiceImpl implements BabyAfterVisitService { }); String typeStr = type.toString(); List models = new ArrayList<>(); - BabyModel babyModel = (BabyModel) model; - String babyModelId = babyModel.getId(); - babyModel = mongoTemplate.findOne(Query.query(Criteria.where("_id").is(babyModelId)), BabyModel.class); - models.add(babyModel); - - // addOrUpdate + String babyModelId; + // 追访概况 addOrUpdate if (Objects.equals(TYPE_STATISTICS, type)) { + BabyModel babyModel = (BabyModel) model; + babyModelId = babyModel.getId(); + babyModel = mongoTemplate.findOne(Query.query(Criteria.where("_id").is(babyModelId)), BabyModel.class); + models.add(babyModel); + // 正式建档/已建档 if (Objects.equals(STATUS_TYPE_BUILD, statusType)) { // 将追访概况中的建档状态由临时建档改为正式建档 @@ -616,20 +752,37 @@ public class BabyAfterVisitServiceImpl implements BabyAfterVisitService { mongoTemplate.updateFirst(query, Update.update("highRiskType", STATUS_TYPE_BUILD), BabyAfterVisitStatisticsModel.class); } } + // 预建档/临时建档 if (Objects.equals(STATUS_TYPE_TEMPORARY_DOCUMENT, statusType)) { - // 新增数据 Future> listFuture = service.submit(new BabyAfterVisitStatisticsModelWork(models, mongoTemplate, screenMapper)); List statisticsModels = listFuture.get(); mongoTemplate.insert(statisticsModels, BabyAfterVisitStatisticsModel.class); } + // 更新儿保数量 + if (Objects.equals(STATUS_TYPE_CHECK, statusType)) { + BabyAfterVisitStatisticsModel one = mongoTemplate.findOne(Query.query(Criteria.where(BABY_ID).is(babyModelId)), BabyAfterVisitStatisticsModel.class); + if (one != null) { + Integer checkSize = one.getCheckSize(); + checkSize ++; + mongoTemplate.updateFirst(Query.query(Criteria.where(BABY_ID).is(babyModelId)), Update.update("checkSize", checkSize), BabyAfterVisitStatisticsModel.class); + } + } + // 更新眼保数量 + if (Objects.equals(STATUS_TYPE_EYE_CHECK, statusType)) { + + } logger.info("已更新到追访概况中"); } - // addOrUpdate + // 档案转正、儿保检查、眼保检查 addOrUpdate if (Objects.equals(TYPE_BUILD, type) || Objects.equals(TYPE_CHECK, type) || Objects.equals(TYPE_EYE_CHECK, type)) { + if (Objects.equals(STATUS_TYPE_NO, statusType)) { + BabyModel babyModel = (BabyModel) model; + babyModelId = babyModel.getId(); + models.add(babyModel); // 将状态正常更新为作废 Query query = Query.query(Criteria.where(BABY_ID).is(babyModelId).and("type").is(typeStr)); @@ -639,36 +792,125 @@ public class BabyAfterVisitServiceImpl implements BabyAfterVisitService { } } if (Objects.equals(STATUS_TYPE_YES, statusType)) { - + BabyModel babyModel = (BabyModel) model; + models.add(babyModel); // 新增数据 Future> listFuture = service.submit(new BabyAfterVisitInfoModelWork(models, mongoTemplate, type)); List infoModels = listFuture.get(); mongoTemplate.insert(infoModels, BabyAfterVisitInfoModel.class); } - // 将预约时间更改为null + // 儿保检查/眼保检查- 将预约时间更改为null if (Objects.equals(STATUS_TYPE_UPDATE, statusType)) { + // 儿保检查 if (Objects.equals(TYPE_CHECK, type)) { + // 条件:当前创建为最新数据的id == 当前更新的数据id ,更新对应的字段为null BabyCheckModel babyCheckModel = (BabyCheckModel) model; - mongoTemplate.updateFirst(Query.query(Criteria.where(BABY_ID).is(babyCheckModel.getBuildId()).and("type").is(typeStr)), Update.update("appointmentTime", null), BabyAfterVisitInfoModel.class); + AggregationResults maps = mongoTemplate.aggregate( + Aggregation.newAggregation(Aggregation.group("buildId").max("created").as("created").addToSet("id").as("babyCheckId")), + BabyCheckModel.class, Map.class); + List mappedResults = maps.getMappedResults(); + if (CollectionUtils.isNotEmpty(mappedResults)) { + Map map = mappedResults.get(mappedResults.size() - 1); + String babyCheckId = map.get("babyCheckId").toString(); + String babyCheckModelId = babyCheckModel.getId(); + logger.info("babyCheckId : {}, babyCheckModelId : {}", babyCheckId, babyCheckModelId); + if (Objects.equals(babyCheckId, babyCheckModelId)) { + String buildId = babyCheckModel.getBuildId(); + Query query = Query.query(Criteria.where(BABY_ID).is(buildId).and("type").is(typeStr)); + Class modelClass = BabyAfterVisitInfoModel.class; + boolean yesExists = mongoTemplate.exists(query.addCriteria(Criteria.where("yn").is(STATUS_TYPE_YES)), modelClass); + if (yesExists) { + mongoTemplate.updateFirst(query.addCriteria(Criteria.where("yn").is(STATUS_TYPE_YES)), Update.update("appointmentTime", null), modelClass); + } else { + boolean noExists = mongoTemplate.exists(query.addCriteria(Criteria.where("yn").is(STATUS_TYPE_NO)), modelClass); + if (noExists) { + // 更新 yn 预约时间 + mongoTemplate.updateFirst(query.addCriteria(Criteria.where("yn").is(STATUS_TYPE_NO)),Update.update("yn", STATUS_TYPE_YES), modelClass); + mongoTemplate.updateFirst(query.addCriteria(Criteria.where("yn").is(STATUS_TYPE_YES)), Update.update("appointmentTime", null), modelClass); + } else { + BabyAfterVisitInfoModel infoModel = new BabyAfterVisitInfoModel(); + BabyModel one = mongoTemplate.findOne(Query.query(Criteria.where("_id").is(buildId)), BabyModel.class); + if (null != one) { + BeanUtils.copy(one, infoModel); + infoModel.setBabyId(one.getId()); + infoModel.setId(null); + infoModel.setType("2"); + infoModel.setYn(1); + infoModel.setAppointmentTime(new Date()); + infoModel.setCreateTime(new Date()); + mongoTemplate.insert(infoModel); + logger.info("新增儿保追访数据成功: {}", infoModel.toString()); + } + } + } + } + } } + + // 眼保检查 if (Objects.equals(TYPE_EYE_CHECK, type)) { + // 条件:当前创建为最新数据的id == 当前更新的数据id ,更新对应的字段为null BabyEyeCheck babyEyeCheck = (BabyEyeCheck) model; - mongoTemplate.updateFirst(Query.query(Criteria.where(BABY_ID).is(babyEyeCheck.getBabyId()).and("type").is(typeStr)), Update.update("appointmentTime", null), BabyAfterVisitInfoModel.class); - } + AggregationResults maps = mongoTemplate.aggregate(Aggregation.newAggregation(Aggregation.group(BABY_ID).max("created").as("created").addToSet("id").as("babyEyeCheckId")), + BabyEyeCheck.class, Map.class); + List mappedResults = maps.getMappedResults(); + if (CollectionUtils.isNotEmpty(mappedResults)) { + Map map = mappedResults.get(mappedResults.size() - 1); + String babyEyeCheckId = map.get("babyEyeCheckId").toString(); + String modelId = babyEyeCheck.getId(); + logger.info("babyEyeCheckId : {}, modelId : {}", babyEyeCheckId, modelId); + if (Objects.equals(babyEyeCheckId, modelId)) { + Query query = Query.query(Criteria.where(BABY_ID).is(babyEyeCheck.getBabyId()).and("type").is(typeStr)); + boolean yesExists = mongoTemplate.exists(query.addCriteria(Criteria.where("yn").is(STATUS_TYPE_YES)), BabyAfterVisitInfoModel.class); + if (yesExists) { + // 存在则之间更新预约时间 + mongoTemplate.updateFirst(query.addCriteria(Criteria.where("yn").is(STATUS_TYPE_YES)), Update.update("appointmentTime", null), BabyAfterVisitInfoModel.class); + } + if (!yesExists){ + // 不存在,检查yn为no的是否存在 + boolean noExists = mongoTemplate.exists(query.addCriteria(Criteria.where("yn").is(STATUS_TYPE_NO)), BabyAfterVisitInfoModel.class); + if (noExists) { + // 更新 yn 预约时间 + mongoTemplate.updateFirst(query.addCriteria(Criteria.where("yn").is(STATUS_TYPE_NO)), Update.update("yn", STATUS_TYPE_YES), BabyAfterVisitInfoModel.class); + mongoTemplate.updateFirst(query.addCriteria(Criteria.where("yn").is(STATUS_TYPE_YES)), Update.update("appointmentTime", null), BabyAfterVisitInfoModel.class); + } + if (!noExists){ + String babyId = babyEyeCheck.getBabyId(); + BabyModel one = mongoTemplate.findOne(Query.query(Criteria.where("_id").is(babyId)), BabyModel.class); + if (null == one) { + logger.error("建档数据不存在 babyId: {}", babyId); + throw new BusinessException(ErrorCodeConstants.BUSINESS_ERROR + "", "建档数据不存在"); + } + BabyAfterVisitInfoModel infoModel = new BabyAfterVisitInfoModel(); + BeanUtils.copy(one, infoModel); + infoModel.setBabyId(one.getId()); + infoModel.setType("3"); + infoModel.setYn(1); + infoModel.setAppointmentTime(new Date()); + infoModel.setCreateTime(new Date()); + infoModel.setId(null); + mongoTemplate.insert(infoModel); + logger.info("新增眼保追访数据成功: {}", infoModel.toString()); + } + } + } + } + } } logger.info("已自动添加到追访列表中"); } + } catch (Exception e) { e.printStackTrace(); - logger.error("追访失败",e); + logger.error("追访失败",e.getStackTrace()); } } /** * 档案转正/儿保检查/眼保检查/听力筛查 - 新增追访记录 * - * @param request + * @param request 参数 * @return */ @Override @@ -708,6 +950,22 @@ public class BabyAfterVisitServiceImpl implements BabyAfterVisitService { Update update = MongoConvertHelper .convertToNativeUpdate(ReflectionUtils.getUpdateField(visitInfoModel)); mongoTemplate.updateFirst(Query.query(Criteria.where("_id").is(visitInfoModel.getId())), update, BabyAfterVisitInfoModel.class); + if (afterVisitWorkflow.equals(TrackDownTransferEnums.B.getId())) { + // 停止当前流程 + mongoTemplate.updateFirst(Query.query(Criteria.where(BABY_ID).is(babyId).and("type").is(type)), Update.update("yn", 2), BabyAfterVisitInfoModel.class); + } + + if (afterVisitWorkflow.equals(TrackDownTransferEnums.C.getId())) { + // 终止所有流程 + int parseInt = Integer.parseInt(type); + if (parseInt == TYPE_CHECK) { + mongoTemplate.updateFirst(Query.query(Criteria.where(BABY_ID).is(babyId).and("type").is("3")), Update.update("yn", 2), BabyAfterVisitInfoModel.class); + } + if (parseInt == TYPE_EYE_CHECK) { + mongoTemplate.updateFirst(Query.query(Criteria.where(BABY_ID).is(babyId).and("type").is("2")), Update.update("yn", 2), BabyAfterVisitInfoModel.class); + } + } + return new BaseResponse(); } diff --git a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/worker/BabyAfterVisitInfoModelWork.java b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/worker/BabyAfterVisitInfoModelWork.java index 4022a6a..38e7bbd 100644 --- a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/worker/BabyAfterVisitInfoModelWork.java +++ b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/worker/BabyAfterVisitInfoModelWork.java @@ -75,13 +75,6 @@ public class BabyAfterVisitInfoModelWork implements Callable operations = new ArrayList<>(); - operations.add(Aggregation.group(BABY_ID).max("created").as("created")); - operations.add(Aggregation.match(Criteria.where(BABY_ID).is(babyId).and("type").is(typeStr))); - Aggregation aggregation = Aggregation.newAggregation(operations); - AggregationResults aggregate = mongoTemplate.aggregate(aggregation, BabyEyeCheck.class, BabyEyeCheck.class); - List mappedResults = aggregate.getMappedResults();*/ - } babyAfterVisitInfoModel.setType(typeStr); babyAfterVisitInfoModel.setId(null); -- 1.8.3.1