From 381f6b5326938f1b2a3ff9db87f5d2d9bd0209aa Mon Sep 17 00:00:00 2001 From: wtt Date: Tue, 4 Aug 2020 16:50:35 +0800 Subject: [PATCH] update --- .../web/controller/BabyEyeCheckController.java | 2 +- .../web/facade/BabySpecialDiseaseClinicFacade.java | 1 + .../web/service/impl/BabyEyeCheckServiceImpl.java | 144 ++++++++--------- .../operate/web/worker/BabyEyeCheckWorker.java | 179 +++++++++++++++++++++ 4 files changed, 249 insertions(+), 77 deletions(-) create mode 100644 platform-operate-api/src/main/java/com/lyms/platform/operate/web/worker/BabyEyeCheckWorker.java diff --git a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/controller/BabyEyeCheckController.java b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/controller/BabyEyeCheckController.java index ca7cce5..afa5f22 100644 --- a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/controller/BabyEyeCheckController.java +++ b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/controller/BabyEyeCheckController.java @@ -158,7 +158,7 @@ public class BabyEyeCheckController extends BaseController { } /** - * 眼保健管理,按照人次展示 + * 眼保健管理,按照儿童档案次数展示 * * @Author: 武涛涛 * @Date: 2020/8/3 14:09 diff --git a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/facade/BabySpecialDiseaseClinicFacade.java b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/facade/BabySpecialDiseaseClinicFacade.java index 14a644a..c10eb72 100644 --- a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/facade/BabySpecialDiseaseClinicFacade.java +++ b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/facade/BabySpecialDiseaseClinicFacade.java @@ -252,6 +252,7 @@ public class BabySpecialDiseaseClinicFacade extends BaseServiceImpl { } } br.setData(babySpecialDiseaseClinicResults); + br.setPageInfo(babyQuery.getPageInfo()); br.setErrorcode(ErrorCodeConstants.SUCCESS); br.setErrormsg("成功"); return br; diff --git a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/service/impl/BabyEyeCheckServiceImpl.java b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/service/impl/BabyEyeCheckServiceImpl.java index 019e265..8a06650 100644 --- a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/service/impl/BabyEyeCheckServiceImpl.java +++ b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/service/impl/BabyEyeCheckServiceImpl.java @@ -3,6 +3,7 @@ package com.lyms.platform.operate.web.service.impl; import com.lyms.platform.biz.service.BabyBookbuildingService; import com.lyms.platform.biz.service.BasicConfigService; import com.lyms.platform.biz.service.YunBookbuildingService; +import com.lyms.platform.common.constants.ErrorCodeConstants; import com.lyms.platform.common.dao.BaseQuery; import com.lyms.platform.common.enums.*; import com.lyms.platform.common.pojo.SyncDataModel; @@ -13,29 +14,36 @@ import com.lyms.platform.operate.web.facade.BasicConfigFacade; import com.lyms.platform.operate.web.facade.OperateLogFacade; import com.lyms.platform.operate.web.facade.OrganizationGroupsFacade; import com.lyms.platform.operate.web.request.YunBookbuildingAddRequest; +import com.lyms.platform.operate.web.result.AntExManagerResult; import com.lyms.platform.operate.web.service.BabyAfterVisitService; import com.lyms.platform.operate.web.service.BabyEyeCheckService; import com.lyms.platform.operate.web.utils.CollectionUtils; import com.lyms.platform.operate.web.utils.MongoUtil; import com.lyms.platform.operate.web.utils.ReflectUtil; import com.lyms.platform.operate.web.utils.ResponseUtil; +import com.lyms.platform.operate.web.worker.BabyEyeCheckWorker; +import com.lyms.platform.operate.web.worker.SieveRegionalCqsievesWorker; import com.lyms.platform.permission.dao.master.BabyEyeCheckMapper; import com.lyms.platform.permission.dao.master.CouponMapper; import com.lyms.platform.pojo.*; import com.lyms.platform.query.BabyModelQuery; import org.apache.commons.collections.map.HashedMap; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.data.domain.Sort; import org.springframework.data.mongodb.core.MongoTemplate; import org.springframework.data.mongodb.core.query.Criteria; import org.springframework.data.mongodb.core.query.Query; import org.springframework.data.mongodb.core.query.Update; +import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; import org.springframework.stereotype.Service; import javax.servlet.http.HttpServletResponse; import java.io.File; import java.io.Serializable; import java.util.*; +import java.util.concurrent.Future; +import java.util.concurrent.TimeUnit; import static com.lyms.platform.operate.web.service.BabyAfterVisitService.*; @@ -52,7 +60,9 @@ public class BabyEyeCheckServiceImpl extends BaseServiceImpl implements BabyEyeC private BabyBookbuildingService babyBookbuildingService; @Autowired private AutoMatchFacade autoMatchFacade; - + @Autowired + @Qualifier("commonThreadPool") + private ThreadPoolTaskExecutor commonThreadPool; @Autowired private MongoTemplate mongoTemplate; @@ -859,21 +869,7 @@ public class BabyEyeCheckServiceImpl extends BaseServiceImpl implements BabyEyeC Integer currentMonthEnd, String chechMonth, boolean positive, String positiveIds, Integer page, Integer limit, Date bookStartDate, Date bookEndDate, String apparatusPositive, String doctorPositive, String yin, String noPassIds) { - /* - 1 获取所有儿童建档数据,筛查做过眼保健检查的档案。 - - 2 眼保健建档新增一个字段标示可以展示到眼保健管理。其它建档可以不管。 - - 3 其它建档在做眼保健检查。给该档案也标记成可以展示到眼保健管理状态。 - 4 列表展示儿童档案,第一有眼保健检查数据。第二档案有标记状态可以展示。 - 如何避免重复叠加, - 1 以前建档的永远不标记可以展示状态。 - 2 以前其它建档没有眼保健检查的可以标记展示状态。 - 3 先查建档关联的有检查结果数据档案。在查有标记状态的档案。合并。在去除重复避免重叠 - - 5 新增的档案,只是标记状态不冗余其它字段 - */ String hospitalId = autoMatchFacade.getHospitalId(userId); boolean b = true; @@ -954,66 +950,38 @@ public class BabyEyeCheckServiceImpl extends BaseServiceImpl implements BabyEyeC } /*end */ - if (positive) { - - Query query = new Query(criteria); - query.with(new Sort(Sort.Direction.DESC, "created")); - query.addCriteria(new Criteria().orOperator(Criteria.where("apparatus").is("2"), Criteria.where("doctorJudgement").is("2"))); - System.out.println(query.toString()); - - int count = (int) mongoTemplate.count(query, BabyEyeCheck.class); - - BaseQuery param = new BaseQuery(); - param.setPage(page); - param.setLimit(limit); - param.mysqlBuild(count); - query.skip(param.getOffset()).limit(param.getLimit()); + List babyIds = new ArrayList<>(); - List babyEyeChecks = mongoTemplate.find(query, BabyEyeCheck.class); - // doFilter(babyEyeChecks); + if (positive) { + List babyEyeChecks = mongoUtil.findField(BabyEyeCheck.class,criteria.orOperator(Criteria.where("apparatus").is("2"),Criteria.where("doctorJudgement").is("2")),"babyId"); + babyIds = CollectionUtils.getId(babyEyeChecks, "babyId", String.class); + babyIds = new ArrayList(new LinkedHashSet(babyIds)); - if (StringUtils.isNotEmpty(positiveIds)) { + /*if (StringUtils.isNotEmpty(positiveIds)) { List ids = CollectionUtils.asList(positiveIds, String.class); if (CollectionUtils.isNotEmpty(ids)) { doFilter(babyEyeChecks, ids); } + }*/ + + }else { + //存放,没有在眼保健建档或在眼保健建档,做个眼保健检查的档案。 + List babyIdBabyEyeCheck = new ArrayList<>(); + List babyEyeChecks = mongoUtil.findField(BabyEyeCheck.class, criteria.and("displayState").is(null), "babyId");//新的检查displayState=1这里不查看新的因为新的档案中可以获取 + babyIdBabyEyeCheck = CollectionUtils.getId(babyEyeChecks, "babyId", String.class); + if (CollectionUtils.isNotEmpty(babyIdBabyEyeCheck)) { + babyIdBabyEyeCheck = new ArrayList(new LinkedHashSet(babyIdBabyEyeCheck)); + babyIds.addAll(babyIdBabyEyeCheck); + } + //获取在眼保健新增的新档案,历史不回去。 + Criteria c =Criteria.where("yn").ne("0").and("hospitalId").is(hospitalId).and("displayState").is("1"); + List babyModels = mongoUtil.findField(BabyModel.class, c, "id"); + List babyIdsBabyModels = CollectionUtils.getId(babyModels, "id", String.class); + if (CollectionUtils.isNotEmpty(babyIdsBabyModels)) { + babyIdsBabyModels = new ArrayList(new LinkedHashSet(babyIdsBabyModels)); + babyIds.addAll(babyIdsBabyModels); } - //Integer count = babyEyeChecks.size(); - - // List datas = CollectionUtils.getPageIds(babyEyeChecks, page, limit); - List> maps = setDatas(babyEyeChecks); - return RespBuilder.buildSuccess(new PageResult(count, page, limit, maps)); } - /* PageResult pageResult = findMongoPage(BabyEyeCheck.class, new Query(criteria).with(new Sort(Sort.Direction.DESC, "created")), page, limit); - List babyEyeChecks = (List) pageResult.getGrid(); - pageResult.setGrid(setDatas(babyEyeChecks)); - return RespBuilder.buildSuccess(pageResult);*/ - List babyIds = new ArrayList<>(); - - - //存放,没有在眼保健建档或在眼保健建档,做个眼保健检查的档案。 - List babyIdBabyEyeCheck = new ArrayList<>(); - List babyEyeChecks = mongoUtil.findField(BabyEyeCheck.class, criteria.and("displayState").is(null), "babyId");//新的检查displayState=1这里不查看新的因为新的档案中可以获取 - babyIdBabyEyeCheck = CollectionUtils.getId(babyEyeChecks, "babyId", String.class); - System.out.println("1 未去重 "+babyIdBabyEyeCheck.size()); - if (CollectionUtils.isNotEmpty(babyIdBabyEyeCheck)) { - babyIdBabyEyeCheck = new ArrayList(new LinkedHashSet(babyIdBabyEyeCheck)); - System.out.println("1 去重后 "+babyIdBabyEyeCheck.size()); - babyIds.addAll(babyIdBabyEyeCheck); - } - //获取在眼保健新增的新档案,历史不回去。 - Criteria c =Criteria.where("yn").ne("0").and("hospitalId").is(hospitalId).and("displayState").is("1"); - List babyModels = mongoUtil.findField(BabyModel.class, c, "id"); - List babyIdsBabyModels = CollectionUtils.getId(babyModels, "id", String.class); - System.out.println("2 未去重 "+babyIdsBabyModels.size()); - if (CollectionUtils.isNotEmpty(babyIdsBabyModels)) { - babyIdsBabyModels = new ArrayList(new LinkedHashSet(babyIdsBabyModels)); - System.out.println("2 去重后 "+babyIdsBabyModels.size()); - babyIds.addAll(babyIdsBabyModels); - } - babyIds = new ArrayList(new LinkedHashSet(babyIds)); - System.out.println("总共档案条数 "+ babyIds.size()); - //控制建档查询。 Criteria cbaby = new Criteria(); @@ -1023,16 +991,40 @@ public class BabyEyeCheckServiceImpl extends BaseServiceImpl implements BabyEyeC List jdbabyModels = mongoUtil.findField(BabyModel.class, cbaby, "id"); babyIds = CollectionUtils.getId(jdbabyModels, "id", String.class); } + babyIds = new ArrayList(new LinkedHashSet(babyIds)); + BabyModelQuery babyModelQuery = new BabyModelQuery(); + babyModelQuery.setNeed("true"); + babyModelQuery.setIds(babyIds); + babyModelQuery.setPage(page); + babyModelQuery.setLimit(limit); + babyModelQuery.setYn(YnEnums.YES.getId()); + List babyModelList = babyBookbuildingService.queryBabyBuildByCond(babyModelQuery); + //根据建档id查询档案表,并且分页。关联眼保健检查。 + int batchSize = 4; + int end = 0; + List listFuture = new ArrayList<>(); + for (int i = 0; i < babyModelList.size(); i += batchSize) { + end = (end + batchSize); + if (end > babyModelList.size()) { + end = babyModelList.size(); + } + listFuture.add(commonThreadPool.submit(new BabyEyeCheckWorker(babyModelList.subList(i, end),mongoTemplate,couponMapper))); + } + List data = new ArrayList<>(); + for (Future f : listFuture) { + try { + data.addAll((List) f.get(30, TimeUnit.SECONDS)); + } catch (Exception e) { + ExceptionUtils.catchException(e, "cqSieve list get result Future error."); + } + } - - - System.out.println("建档条件后---总共档案条数 "+ babyIds.size()); - - //更加建档id查询档案表,并且分页。关联眼保健检查。 - - - - return null; + BaseListResponse objectResponse = new BaseListResponse(); + objectResponse.setErrorcode(ErrorCodeConstants.SUCCESS); + objectResponse.setData(data); + objectResponse.setPageInfo(babyModelQuery.getPageInfo()); + objectResponse.setErrormsg("成功"); + return objectResponse; } private void doFilter(List babyEyeChecks, List ids) { diff --git a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/worker/BabyEyeCheckWorker.java b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/worker/BabyEyeCheckWorker.java new file mode 100644 index 0000000..0184b4f --- /dev/null +++ b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/worker/BabyEyeCheckWorker.java @@ -0,0 +1,179 @@ +package com.lyms.platform.operate.web.worker; + +import com.lyms.platform.common.dao.BaseQuery; +import com.lyms.platform.common.utils.DateUtil; +import com.lyms.platform.common.utils.StringUtils; +import com.lyms.platform.operate.web.utils.CollectionUtils; +import com.lyms.platform.permission.dao.master.CouponMapper; +import com.lyms.platform.pojo.BabyEyeCheck; +import com.lyms.platform.pojo.BabyModel; +import org.springframework.data.domain.Sort; +import org.springframework.data.mongodb.core.MongoTemplate; +import org.springframework.data.mongodb.core.query.Criteria; +import org.springframework.data.mongodb.core.query.Query; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.concurrent.Callable; + + +public class BabyEyeCheckWorker implements Callable> { + + + private List list; + + private MongoTemplate mongoTemplate; + private CouponMapper couponMapper; + public BabyEyeCheckWorker(List list, MongoTemplate mongoTemplate, CouponMapper couponMapper) { + this.list = list; + this.mongoTemplate = mongoTemplate; + this.couponMapper = couponMapper; + } + + + @Override + public List call() throws Exception { + List results = new ArrayList<>(); + + for (BabyModel babyModel : list) { + Map mapResult = new HashMap(); + mapResult.put("babyId", babyModel.getId());//儿童档案id + mapResult.put("babyName", babyModel.getName());//儿童姓名 + if(babyModel.getSex()!=null && babyModel.getSex()==0){ + mapResult.put("sex", "女");//性别 + }else if(babyModel.getSex()!=null && babyModel.getSex()==1){ + mapResult.put("sex", "男"); + }else { + mapResult.put("sex", "_"); + } + mapResult.put("mname", babyModel.getMname());//母亲姓名 + mapResult.put("birth", DateUtil.getyyyy_MM_dd(babyModel.getBirth()));//出生日期 + mapResult.put("buildDate", DateUtil.getyyyy_MM_dd(babyModel.getBuildDate()));//建档日期 + if(babyModel!=null && StringUtils.isNotEmpty(babyModel.getId())){ + List checkModels = mongoTemplate.find(Query.query(Criteria.where("babyId").is(babyModel.getId()).and("yn").is("1")).with(new Sort(Sort.Direction.DESC, "modified")), BabyEyeCheck.class); + if(CollectionUtils.isNotEmpty(checkModels)){ + BabyEyeCheck babyEyeCheck = checkModels.get(0); + mapResult.put("checkMonthAge", babyEyeCheck.getCheckMonthAge());//检查月龄 + StringBuilder positive = getYxxm(babyEyeCheck);//阳性项目 + mapResult.put("positive", positive.toString());//阳性项目 + mapResult.put("doctor", couponMapper.getUserName(babyEyeCheck.getDoctor()));//检查医生 + mapResult.put("checkTime", DateUtil.getYyyyMmDd(babyEyeCheck.getCheckTime()));//检查日期 + mapResult.put("nextCheckTime", DateUtil.getYyyyMmDd(babyEyeCheck.getNextCheckTime()));//预约日期 + }else { + mapResult.put("checkMonthAge", ""); + mapResult.put("positive", ""); + mapResult.put("doctor", ""); + mapResult.put("checkTime", ""); + mapResult.put("nextCheckTime", ""); + } + } + results.add(mapResult); + } + return results; + } + + private StringBuilder getYxxm(BabyEyeCheck babyEyeCheck) { + StringBuilder positive = new StringBuilder(); /** 阳性项目 */ + if ("yang".equals(babyEyeCheck.getExtRightEyelook())) { + positive.append("外眼观察(右) "); + } + if ("yang".equals(babyEyeCheck.getExtLeftEyelook())) { + positive.append("外眼观察(左) "); + } + if ("yang".equals(babyEyeCheck.getBlinkRightReflex())) { + positive.append("瞬目反射(右) "); + } + if ("yang".equals(babyEyeCheck.getBlinkLefttReflex())) { + positive.append("瞬目反射(左) "); + } + if ("yang".equals(babyEyeCheck.getPupillaryRightReflex())) { + positive.append("瞳孔对光反射(右) "); + } + if ("yang".equals(babyEyeCheck.getPupillaryLeftReflex())) { + positive.append("瞳孔对光反射(左) "); + } + if ("yang".equals(babyEyeCheck.getRedRightReflex())) { + positive.append("瞳孔红光反射(右) "); + } + if ("yang".equals(babyEyeCheck.getRedLeftReflex())) { + positive.append("瞳孔红光反射(左) "); + } + if ("yang".equals(babyEyeCheck.getRedReflex())) { + positive.append("红光反射 "); + } + if ("yang".equals(babyEyeCheck.getConjunctiva())) { + positive.append("结膜 "); + } + if ("yang".equals(babyEyeCheck.getCorneal())) { + positive.append("角膜 "); + } + if ("yang".equals(babyEyeCheck.getLacrimalApparatus())) { + positive.append("泪器 "); + } + if ("yang".equals(babyEyeCheck.getNystagmus())) { + positive.append("视动性眼震 "); + } + if ("yang".equals(babyEyeCheck.getExtEyelook())) { + positive.append("外眼观察 "); + } + if ("yang".equals(babyEyeCheck.getEyePositionId2())) { + positive.append("眼位(医生判定)"); + } + if ("yang".equals(babyEyeCheck.getRedLeft2())) { + positive.append("红光反射(医生判定阳性)"); + } + if ("yang".equals(babyEyeCheck.getVision2())) { + positive.append("视力(医生判定阳性)"); + } + if ("yang".equals(babyEyeCheck.getY2())) { + positive.append("手持眼光仪(医生判定阳性)"); + } + if ("yang".equals(babyEyeCheck.getRefraction2())) { + if ("197".equals(babyEyeCheck.getHospitalId())) { + positive.append("屈光不正"); + } else { + positive.append("屈光(医生判定阳性)"); + } + + } + + if ("ruoyang".equals(babyEyeCheck.getRedRightReflex())) { + positive.append("瞳孔红光反射(右)(稍减弱)"); + } + if ("ruoyang".equals(babyEyeCheck.getRedLeftReflex())) { + positive.append("瞳孔红光反射(左)(稍减弱)"); + } + if ("ruoyang".equals(babyEyeCheck.getRedReflex())) { + positive.append("红光反射(稍减弱)"); + } + + if ("2".equals(babyEyeCheck.getEyeAppearance())) { + positive.append("眼外观 "); + } + if ("2".equals(babyEyeCheck.getRedReflexQhd())) { + positive.append("红光反射 "); + } + if ("2".equals(babyEyeCheck.getBlinkReflex())) { + positive.append("瞬目反射 "); + } + if ("2".equals(babyEyeCheck.getRedBallTest())) { + positive.append("红球试验 "); + } + if ("2".equals(babyEyeCheck.getBehaviorObservation())) { + positive.append("视物行为观察 "); + } + if ("2".equals(babyEyeCheck.getRefractiveScreening())) { + positive.append("屈光筛查 "); + } + if ("2".equals(babyEyeCheck.getEyePositionExamination())) { + positive.append("眼位检查 "); + } + if ("2".equals(babyEyeCheck.getEyeMovement())) { + positive.append("眼球运动 "); + } + return positive; + } + +} -- 1.8.3.1