diff --git a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/facade/TrackDownFacade.java b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/facade/TrackDownFacade.java new file mode 100644 index 0000000..ca164e8 --- /dev/null +++ b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/facade/TrackDownFacade.java @@ -0,0 +1,181 @@ +package com.lyms.platform.operate.web.facade; + +import com.lyms.platform.biz.service.BasicConfigService; +import com.lyms.platform.biz.service.TrackDownRecordService; +import com.lyms.platform.biz.service.TrackDownService; +import com.lyms.platform.common.constants.ErrorCodeConstants; +import com.lyms.platform.common.enums.TrackDownDateEnums; +import com.lyms.platform.common.enums.TrackDownTransferEnums; +import com.lyms.platform.common.result.BaseListResponse; +import com.lyms.platform.common.utils.DateUtil; +import com.lyms.platform.common.utils.StringUtils; +import com.lyms.platform.operate.web.request.TrackDownQueryRequest; +import com.lyms.platform.operate.web.utils.CommonsHelper; +import com.lyms.platform.pojo.TrackDown; +import com.lyms.platform.pojo.TrackDownRecord; +import com.lyms.platform.query.TrackDownRecordQuery; +import org.apache.commons.collections.CollectionUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +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.query.Criteria; +import org.springframework.data.mongodb.core.query.Query; +import org.springframework.stereotype.Component; + +import javax.annotation.PostConstruct; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +/** + * 添加类的一句话简单描述。 + *

+ * 详细描述 + *

+ * 示例代码 + *

+ * 
+ * + * @author JIAZHI.JIANG + * @version BME V100R001 2018-01-17 16:40 + * @since BME V100R001C40B104 + */ +@Component +public class TrackDownFacade { + + //日志调测器 + private static final Logger logger = LoggerFactory.getLogger(TrackDownFacade.class); + + @Autowired + private TrackDownRecordService trackDownRecordService; + + @Autowired + private TrackDownService trackDownService; + + @Autowired + private BasicConfigService basicConfigService; + + private Map trackDownTypeHandlerMap; + @Autowired + private MongoTemplate mongoTemplate; + @Autowired + private AutoMatchFacade autoMatchFacade; + + @PostConstruct + private void init() { + trackDownTypeHandlerMap = new HashMap<>(); + trackDownTypeHandlerMap.put(TrackDownDateEnums.A.getId(), new FQTrackDownTypeHandler()); + } + + /** + * 转换为本地的查询条件 + * + * @param downQueryRequest + * @return + */ + private TrackDownRecordQuery convertNaviteQuery(TrackDownQueryRequest downQueryRequest,Integer userId) { + TrackDownRecordQuery downRecordQuery = new TrackDownRecordQuery(); + downRecordQuery.setAreaId(downQueryRequest.getAreaId()); + downRecordQuery.setProvinceId(downQueryRequest.getProvinceId()); + downRecordQuery.setCityId(downQueryRequest.getCityId()); + downRecordQuery.setStreetId(downQueryRequest.getStreetId()); + downRecordQuery.setTrackType(downQueryRequest.getTrackType()); + downRecordQuery.setPage(downQueryRequest.getPage()); + downRecordQuery.setLimit(downQueryRequest.getLimit()); + downRecordQuery.setNeed("1"); + downRecordQuery.setSort("modified desc"); + downRecordQuery.setHospitalId(autoMatchFacade.getHospitalId(userId)); + return downRecordQuery; + } + + public BaseListResponse list(TrackDownQueryRequest downQueryRequest,Integer userId) { + //转换为本地的查询条件 + TrackDownRecordQuery downRecordQuery = convertNaviteQuery(downQueryRequest,userId); + + List downRecordList = trackDownRecordService.queryTrackDown(downRecordQuery); + + List data = new ArrayList<>(); + TrackDownTypeHandler downTypeHandler = trackDownTypeHandlerMap.get(downQueryRequest.getTrackType()); + if (CollectionUtils.isNotEmpty(downRecordList) && null != downTypeHandler) { + for (TrackDownRecord trackDownRecord : downRecordList) { + data.add(downTypeHandler.build(trackDownRecord, mongoTemplate)); + } + } + + return new BaseListResponse().setErrormsg(ErrorCodeConstants.SUCCESS_DESCRIPTION).setErrorcode(ErrorCodeConstants.SUCCESS).setData(data).setPageInfo(downRecordQuery.getPageInfo()); + } + + /** + * 构建返回字段 + */ + interface TrackDownTypeHandler { + + /** + * 构建返回字段内容 + * + * @param downRecord 追访记录 + * @param mongoTemplate 数据库连接 + * @return 返回的内容 + */ + Map build(TrackDownRecord downRecord, MongoTemplate mongoTemplate); + } + + /** + * 婚前检查返回的字段 + */ + class FQTrackDownTypeHandler implements TrackDownTypeHandler { + + @Override + public Map build(TrackDownRecord downRecord, MongoTemplate mongoTemplate) { + Map temp = new HashMap<>(); + temp.put("id", downRecord.getId()); + temp.put("pid", downRecord.getPid()); + temp.put("residentsArchiveId", downRecord.getParentId()); + temp.put("username", downRecord.getUsername()); + temp.put("cardNo", downRecord.getCardNo()); + temp.put("residenceAddress", CommonsHelper.getFullAddress(downRecord.getProvinceRegisterId(), downRecord.getCityRegisterId(), downRecord.getAreaRegisterId(), downRecord.getAddressRegister(), basicConfigService)); /** 居住地 */ + temp.put("phone", StringUtils.encryPhone(downRecord.getPhone())); + TrackDown trackDown = mongoTemplate.findOne(Query.query(Criteria.where("parentId").is(downRecord.getParentId()).and("yn").is(1)).with(new Sort(Sort.Direction.DESC, "created")), TrackDown.class); + temp.put("age", DateUtil.getAge(downRecord.getBirth())); + // 婚检追访结果 + temp.put("result", trackDown == null ? "--" : TrackDownTransferEnums.getName(trackDown.getTrackDownType())); + // 婚检追访时间 + temp.put("trackDownTime", trackDown == null ? "--" : DateUtil.getyyyy_MM_dd(trackDown.getTrackDownDate())); + // 预约时间 + temp.put("yyTime", trackDown == null ? "--" : DateUtil.getyyyy_MM_dd(trackDown.getReservatDate())); + return temp; + } + } + + + /** + * 产前检查返回的字段 + */ + class CJTrackDownTypeHandler implements TrackDownTypeHandler { + + @Override + public Map build(TrackDownRecord downRecord, MongoTemplate mongoTemplate) { + Map temp = new HashMap<>(); + temp.put("id", downRecord.getParentId()); + temp.put("pid", downRecord.getPid()); + temp.put("residentsArchiveId", ""); + temp.put("username", downRecord.getUsername()); + temp.put("cardNo", downRecord.getCardNo()); + temp.put("residenceAddress", CommonsHelper.getFullAddress(downRecord.getProvinceRegisterId(), downRecord.getCityRegisterId(), downRecord.getAreaRegisterId(), downRecord.getAddressRegister(), basicConfigService)); /** 居住地 */ + temp.put("phone", StringUtils.encryPhone(downRecord.getPhone())); + TrackDown trackDown = mongoTemplate.findOne(Query.query(Criteria.where("parentId").is(downRecord.getParentId()).and("yn").is(1)).with(new Sort(Sort.Direction.DESC, "created")), TrackDown.class); + temp.put("age", DateUtil.getAge(downRecord.getBirth())); + // 婚检追访结果 + temp.put("result", trackDown == null ? "--" : TrackDownTransferEnums.getName(trackDown.getTrackDownType())); + // 婚检追访时间 + temp.put("trackDownTime", trackDown == null ? "--" : DateUtil.getyyyy_MM_dd(trackDown.getTrackDownDate())); + // 预约时间 + temp.put("yyTime", trackDown == null ? "--" : DateUtil.getyyyy_MM_dd(trackDown.getReservatDate())); + return temp; + } + } +} \ No newline at end of file diff --git a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/facade/TrackDownJobFacade.java b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/facade/TrackDownJobFacade.java new file mode 100644 index 0000000..e71288c --- /dev/null +++ b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/facade/TrackDownJobFacade.java @@ -0,0 +1,422 @@ +package com.lyms.platform.operate.web.facade; + +import com.lyms.platform.biz.service.PatientsService; +import com.lyms.platform.biz.service.PremaritalCheckupService; +import com.lyms.platform.biz.service.ResidentsArchiveService; +import com.lyms.platform.biz.service.TrackDownRecordService; +import com.lyms.platform.common.constants.ErrorCodeConstants; +import com.lyms.platform.common.enums.TrackDownDateEnums; +import com.lyms.platform.common.enums.YnEnums; +import com.lyms.platform.common.result.BaseResponse; +import com.lyms.platform.common.utils.DateUtil; +import com.lyms.platform.common.utils.StringUtils; +import com.lyms.platform.pojo.Patients; +import com.lyms.platform.pojo.PremaritalCheckup; +import com.lyms.platform.pojo.ResidentsArchiveModel; +import com.lyms.platform.pojo.TrackDownRecord; +import com.lyms.platform.query.PatientsQuery; +import com.lyms.platform.query.PremaritalCheckupQuery; +import com.lyms.platform.query.ResidentsArchiveQuery; +import com.lyms.platform.query.TrackDownRecordQuery; +import org.apache.commons.collections.CollectionUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; +import org.springframework.stereotype.Component; + +import javax.annotation.PostConstruct; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + + +/** + * 追访的任务功能 + *

+ * 主要实现不同的业务跑入到追访对应的列表中 + *

+ * 示例代码 + *

+ * 
+ * + * @author JIAZHI.JIANG + * @version BME V100R001 2018-01-18 11:03 + * @since BME V100R001C40B104 + */ +@Component +public class TrackDownJobFacade { + + //日志调测器 + private static final Logger logger = LoggerFactory.getLogger(TrackDownJobFacade.class); + + private List downJobHandlers = new ArrayList<>(); + + + @Autowired + @Qualifier("commonThreadPool") + private ThreadPoolTaskExecutor commonThreadPool; + + @Autowired + private TrackDownRecordService downRecordService; + + @Autowired + private PatientsService patientsService; + + @PostConstruct + private void init() { + //婚前检查数据加载 + downJobHandlers.add(new HJTrackDownDataLoader()); + //怀孕数据加载 + downJobHandlers.add(new HYTrackDownDataLoader()); + //产检数据加载 + downJobHandlers.add(new CJTrackDownDataLoader()); + //分娩数据加载 + downJobHandlers.add(new FMTrackDownDataLoader()); + } + + /** + * 妇女建档 + */ + @Autowired + private ResidentsArchiveService residentsArchiveService; + + + /** + * 婚前检查 + */ + @Autowired + private PremaritalCheckupService premaritalCheckupService; + + + public BaseResponse doBatchExecute(Integer d) { + for (final TrackDownDataLoader downDataLoader : downJobHandlers) { + commonThreadPool.execute(new Thread() { + @Override + public void run() { + downDataLoader.execute(); + } + }); + } + return new BaseResponse().setErrormsg(ErrorCodeConstants.SUCCESS_DESCRIPTION).setErrorcode(ErrorCodeConstants.SUCCESS); + } + + interface TrackDownDataLoader { + //分页的条数 + int limit = 100; + + /** + * 执行处理方法 + */ + void execute(); + + /** + * 单条数据狐狸 + * + * @param model + */ + void handOneByOne(T model); + + /** + * 构建加入到追访列表的数据 + * + * @param model + * @return + */ + TrackDownRecord build(T model); + } + + /** + * 分娩追访数据加载 + */ + class FMTrackDownDataLoader implements TrackDownDataLoader { + + @Override + public void execute() { + int page = 0; + List data = null; + do { + PatientsQuery patientsQuery1 = new PatientsQuery(); + patientsQuery1.setYn(YnEnums.YES.getId()); + patientsQuery1.setSort("created asc"); + patientsQuery1.setNeed("1"); + patientsQuery1.setPage(page); + patientsQuery1.setLimit(limit); + patientsQuery1.setType(1); + //预产期前两周 + patientsQuery1.setDueDateStart(DateUtil.addDay(new Date(), -14)); + + logger.info("FMTrackDownDataLoader execute "); + //查询妇女建档 + data = patientsService.queryPatient(patientsQuery1); + if (CollectionUtils.isNotEmpty(data)) { + for (Patients model : data) { + handOneByOne(model); + } + } + page++; + } while (CollectionUtils.isNotEmpty(data) && data.size() == limit); + } + + @Override + public void handOneByOne(Patients model) { + TrackDownRecordQuery downRecordQuery = new TrackDownRecordQuery(); + downRecordQuery.setParentId(model.getId()); + List records = downRecordService.queryTrackDown(downRecordQuery); + if (CollectionUtils.isEmpty(records)) { + logger.info("FMTrackDownDataLoader addTrackDown by id :" + model.getId()); + downRecordService.addTrackDown(build(model)); + } + } + + @Override + public TrackDownRecord build(Patients model) { + TrackDownRecord downRecord = new TrackDownRecord(); + downRecord.setParentId(model.getId()); + downRecord.setPid(model.getPid()); + downRecord.setLastMenses(model.getLastMenses()); + downRecord.setUsername(model.getUsername()); + downRecord.setCityRegisterId(model.getCityRegisterId()); + downRecord.setBirth(model.getBirth()); + downRecord.setAreaRegisterId(model.getAreaRegisterId()); + downRecord.setCardNo(model.getCardNo()); + downRecord.setAddressRegister(model.getAddressRegister()); + downRecord.setHospitalId(model.getHospitalId()); + downRecord.setPhone(model.getPhone()); + downRecord.setStreetRegisterId(model.getStreetRegisterId()); + downRecord.setAreaRegisterId(model.getAreaRegisterId()); + downRecord.setStatus(1); + downRecord.setTrackType(TrackDownDateEnums.E.getId()); + downRecord.setDone(0); + return downRecord; + } + } + + + /** + * 产检追访数据加载 + */ + class CJTrackDownDataLoader implements TrackDownDataLoader { + + @Override + public void execute() { + int page = 0; + List data = null; + do { + PatientsQuery patientsQuery1 = new PatientsQuery(); + patientsQuery1.setYn(YnEnums.YES.getId()); + patientsQuery1.setSort("created asc"); + patientsQuery1.setNeed("1"); + patientsQuery1.setPage(page); + patientsQuery1.setLimit(limit); + patientsQuery1.setType(1); + + //查询妇女建档 + data = patientsService.queryPatient(patientsQuery1); + if (CollectionUtils.isNotEmpty(data)) { + for (Patients model : data) { + handOneByOne(model); + } + } + page++; + } while (CollectionUtils.isNotEmpty(data) && data.size() == limit); + } + + @Override + public void handOneByOne(Patients model) { + TrackDownRecordQuery downRecordQuery = new TrackDownRecordQuery(); + downRecordQuery.setParentId(model.getId()); + List records = downRecordService.queryTrackDown(downRecordQuery); + if (CollectionUtils.isEmpty(records)) { + logger.info("CJTrackDownDataLoader addTrackDown by id :" + model.getId()); + downRecordService.addTrackDown(build(model)); + } else { + //TODO 处理已经在追访列表的情况 + } + } + + @Override + public TrackDownRecord build(Patients model) { + TrackDownRecord downRecord = new TrackDownRecord(); + downRecord.setParentId(model.getId()); + downRecord.setPid(model.getPid()); + downRecord.setLastMenses(model.getLastMenses()); + downRecord.setUsername(model.getUsername()); + downRecord.setCityRegisterId(model.getCityRegisterId()); + downRecord.setBirth(model.getBirth()); + downRecord.setAreaRegisterId(model.getAreaRegisterId()); + downRecord.setCardNo(model.getCardNo()); + downRecord.setAddressRegister(model.getAddressRegister()); + downRecord.setHospitalId(model.getHospitalId()); + downRecord.setPhone(model.getPhone()); + downRecord.setStreetRegisterId(model.getStreetRegisterId()); + downRecord.setAreaRegisterId(model.getAreaRegisterId()); + downRecord.setDone(0); + downRecord.setStatus(1); + downRecord.setTrackType(TrackDownDateEnums.C.getId()); + return downRecord; + } + } + + /** + * 产筛追访数据加载 + */ + class CSTrackDownDataLoader implements TrackDownDataLoader { + + @Override + public void execute() { + + } + + @Override + public void handOneByOne(Patients model) { + + } + + @Override + public TrackDownRecord build(Patients model) { + return null; + } + } + + /** + * 怀孕建档数据加载 + *

+ * 完成婚检流程并没有建档 + */ + class HYTrackDownDataLoader implements TrackDownDataLoader { + + @Override + public void execute() { + int page = 0; + List data = null; + do { + ResidentsArchiveQuery archiveQuery = new ResidentsArchiveQuery(); + archiveQuery.setYn(YnEnums.YES.getId()); + archiveQuery.setSort("created asc"); + archiveQuery.setNeed("1"); + archiveQuery.setPage(page); + archiveQuery.setLimit(limit); + //查询妇女建档 + data = residentsArchiveService.queryResident(archiveQuery); + if (CollectionUtils.isNotEmpty(data)) { + for (ResidentsArchiveModel model : data) { + handOneByOne(model); + } + } + page++; + } while (CollectionUtils.isNotEmpty(data) && data.size() == limit); + } + + @Override + public void handOneByOne(ResidentsArchiveModel model) { + PatientsQuery patientsQuery1 = new PatientsQuery(); + patientsQuery1.setCardNo(model.getCertificateNum()); + patientsQuery1.setPcerteTypeId(model.getCertificateTypeId()); + patientsQuery1.setType(1); + Integer count = patientsService.queryPatientCount(patientsQuery1); + if (null != count && count == 0) { + logger.info("HYTrackDownDataLoader addTrackDown by id :" + model.getId()); + downRecordService.addTrackDown(build(model)); + } + } + + @Override + public TrackDownRecord build(ResidentsArchiveModel model) { + TrackDownRecord record = new TrackDownRecord(); + record.setParentId(model.getId()); + record.setAddressRegister(model.getAddressRegister()); + record.setAreaRegisterId(model.getAreaRegisterId()); + record.setBirth(model.getBirthday()); + record.setCityRegisterId(model.getCityRegisterId()); + record.setUsername(model.getUsername()); + record.setStreetRegisterId(model.getStreetRegisterId()); + record.setPhone(model.getPhone()); + record.setHospitalId(model.getHospitalId()); + record.setStatus(1); + record.setDone(0); + record.setCardNo(model.getCertificateNum()); + record.setTrackType(TrackDownDateEnums.B.getId()); + return record; + } + } + + + /** + * 婚前检查数据加载 + *

+ * 该处查询的患者为院内存在妇女建档,且没有进行婚前检查并且追访过程中未流转至下一环节的患者信息 + */ + class HJTrackDownDataLoader implements TrackDownDataLoader { + + @Override + public void execute() { + int page = 1; + List data = null; + do { + ResidentsArchiveQuery archiveQuery = new ResidentsArchiveQuery(); + archiveQuery.setYn(YnEnums.YES.getId()); + archiveQuery.setSort("created asc"); + archiveQuery.setNeed("1"); + archiveQuery.setPage(page); + archiveQuery.setLimit(limit); + //查询妇女建档 + data = residentsArchiveService.queryResident(archiveQuery); + if (CollectionUtils.isNotEmpty(data)) { + for (ResidentsArchiveModel model : data) { + //单条数据处理 + handOneByOne(model); + } + } + page++; + } while (CollectionUtils.isNotEmpty(data) && data.size() == limit); + } + + /** + * 单条处理 + * + * @param model + */ + public void handOneByOne(ResidentsArchiveModel model) { + if (null != model && StringUtils.isNotEmpty(model.getId())) { + PremaritalCheckupQuery premaritalCheckupQuery = new PremaritalCheckupQuery(); + premaritalCheckupQuery.setYn(YnEnums.YES.getId()); + premaritalCheckupQuery.setParentId(model.getId()); + premaritalCheckupQuery.setSexType(1); + List DATA = premaritalCheckupService.queryPremaritalCheckup(premaritalCheckupQuery); + + if (CollectionUtils.isEmpty(DATA)) { + logger.info("HJTrackDownDataLoader addTrackDown by id :" + model.getId()); + downRecordService.addTrackDown(build(model)); + } else { + //TODO 如果有婚检还存在的情况 + } + } + } + + /** + * 构建入追访列表的数据 + * + * @param model + * @return + */ + public TrackDownRecord build(ResidentsArchiveModel model) { + TrackDownRecord record = new TrackDownRecord(); + record.setParentId(model.getId()); + record.setAddressRegister(model.getAddressRegister()); + record.setAreaRegisterId(model.getAreaRegisterId()); + record.setBirth(model.getBirthday()); + record.setCityRegisterId(model.getCityRegisterId()); + record.setUsername(model.getUsername()); + record.setStreetRegisterId(model.getStreetRegisterId()); + record.setPhone(model.getPhone()); + record.setHospitalId(model.getHospitalId()); + record.setStatus(1); + record.setDone(0); + record.setCardNo(model.getCertificateNum()); + record.setTrackType(TrackDownDateEnums.A.getId()); + return record; + } + } +} \ No newline at end of file diff --git a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/request/TrackDownQueryRequest.java b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/request/TrackDownQueryRequest.java new file mode 100644 index 0000000..c7ff64d --- /dev/null +++ b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/request/TrackDownQueryRequest.java @@ -0,0 +1,71 @@ +package com.lyms.platform.operate.web.request; + +/** + * 添加类的一句话简单描述。 + *

+ * 详细描述 + *

+ * 示例代码 + *

+ * 
+ * + * @author JIAZHI.JIANG + * @version BME V100R001 2018-01-17 17:05 + * @since BME V100R001C40B104 + */ +public class TrackDownQueryRequest extends BasePageQueryRequest{ + private String provinceId; + private String cityId; + private String areaId; + private String streetId; + private String key; + private Integer trackType; + + 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 String getKey() { + return key; + } + + public void setKey(String key) { + this.key = key; + } + + public Integer getTrackType() { + return trackType; + } + + public void setTrackType(Integer trackType) { + this.trackType = trackType; + } +}