From d2ddff5d646969a0ede44add5786312c6d79a29d Mon Sep 17 00:00:00 2001 From: jiangjiazhi Date: Tue, 29 Nov 2016 16:58:16 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E7=BB=9F=E8=AE=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/lyms/platform/biz/dal/IAntExRecordDao.java | 67 +++++++ .../com/lyms/platform/biz/dal/IPatientDao.java | 3 + .../platform/biz/dal/impl/AntExRecordDaoImpl.java | 105 +++++++++++ .../lyms/platform/biz/dal/impl/PatientDaoImpl.java | 24 ++- .../platform/biz/service/AntExRecordService.java | 195 +++++++++++++++++++++ .../lyms/platform/biz/service/PatientsService.java | 9 + .../platform/common/dao/operator/MongoQuery.java | 9 + .../com/lyms/platform/pojo/AntExRecordModel.java | 155 ++++++++++++++++ .../com/lyms/platform/query/AntExRecordQuery.java | 182 +++++++++++++++++++ .../com/lyms/platform/query/PatientsQuery.java | 15 ++ .../web/controller/StatisticsController.java | 26 ++- .../operate/web/facade/AntExRecordFacade.java | 192 ++++++++++++++++++++ .../operate/web/request/BasePageQueryRequest.java | 4 +- .../web/request/CjStatisticsQueryRequest.java | 69 ++++++++ .../operate/web/result/CjStatisticsListResult.java | 129 ++++++++++++++ .../operate/web/result/CjStatisticsResult.java | 40 +++++ .../operate/web/result/HighScoreResult.java | 2 +- 17 files changed, 1213 insertions(+), 13 deletions(-) create mode 100644 platform-biz-patient-service/src/main/java/com/lyms/platform/biz/dal/IAntExRecordDao.java create mode 100644 platform-biz-patient-service/src/main/java/com/lyms/platform/biz/dal/impl/AntExRecordDaoImpl.java create mode 100644 platform-biz-patient-service/src/main/java/com/lyms/platform/biz/service/AntExRecordService.java create mode 100644 platform-dal/src/main/java/com/lyms/platform/pojo/AntExRecordModel.java create mode 100644 platform-dal/src/main/java/com/lyms/platform/query/AntExRecordQuery.java create mode 100644 platform-operate-api/src/main/java/com/lyms/platform/operate/web/facade/AntExRecordFacade.java create mode 100644 platform-operate-api/src/main/java/com/lyms/platform/operate/web/request/CjStatisticsQueryRequest.java create mode 100644 platform-operate-api/src/main/java/com/lyms/platform/operate/web/result/CjStatisticsListResult.java create mode 100644 platform-operate-api/src/main/java/com/lyms/platform/operate/web/result/CjStatisticsResult.java diff --git a/platform-biz-patient-service/src/main/java/com/lyms/platform/biz/dal/IAntExRecordDao.java b/platform-biz-patient-service/src/main/java/com/lyms/platform/biz/dal/IAntExRecordDao.java new file mode 100644 index 0000000..52d9117 --- /dev/null +++ b/platform-biz-patient-service/src/main/java/com/lyms/platform/biz/dal/IAntExRecordDao.java @@ -0,0 +1,67 @@ +package com.lyms.platform.biz.dal; + +import com.lyms.platform.common.dao.operator.MongoQuery; +import com.lyms.platform.pojo.AntExRecordModel; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * 产检管理接口 + *

+ * Created by Administrator on 2016/11/28 0028. + */ +public interface IAntExRecordDao { + + + /** + * 增加一条记录 + * + * @return + */ + AntExRecordModel addOneRecord(AntExRecordModel record); + + /** + * 批量增加记录 + * + * @param list + */ + void batchAddRecord(List list); + + /** + * 查询符合条件的产检 + * + * @param mongoQuery + * @return + */ + List queryRecord(MongoQuery mongoQuery); + + /** + * 根据id删除数据 + * + * @param id + */ + void deleteById(String id); + + /** + * 获取单挑记录详情 + * + * @param id + */ + AntExRecordModel findOneById(String id); + + /** + * 修改单挑记录 + */ + void updateOneRecord(AntExRecordModel record, String id); + + /** + * 批量修改数据 + */ + void batchUpdateRecord(AntExRecordModel record, MongoQuery mongoQuery); + + Integer count(MongoQuery mongoQuery); + + List aggregateOne(MongoQuery mongoQuery); +} diff --git a/platform-biz-patient-service/src/main/java/com/lyms/platform/biz/dal/IPatientDao.java b/platform-biz-patient-service/src/main/java/com/lyms/platform/biz/dal/IPatientDao.java index 9603e31..4afe5f6 100644 --- a/platform-biz-patient-service/src/main/java/com/lyms/platform/biz/dal/IPatientDao.java +++ b/platform-biz-patient-service/src/main/java/com/lyms/platform/biz/dal/IPatientDao.java @@ -5,6 +5,7 @@ import com.lyms.platform.common.dao.operator.Page; import com.lyms.platform.pojo.Patients; import com.lyms.platform.pojo.PuerperaModel; +import java.util.HashMap; import java.util.List; /** @@ -32,4 +33,6 @@ public interface IPatientDao { void findAndModify(MongoQuery query,Patients obj); void updatePatientOneCol(String id, String colName, Object colValue); + + List aggregateOne(MongoQuery mongoQuery); } diff --git a/platform-biz-patient-service/src/main/java/com/lyms/platform/biz/dal/impl/AntExRecordDaoImpl.java b/platform-biz-patient-service/src/main/java/com/lyms/platform/biz/dal/impl/AntExRecordDaoImpl.java new file mode 100644 index 0000000..c1bbf9d --- /dev/null +++ b/platform-biz-patient-service/src/main/java/com/lyms/platform/biz/dal/impl/AntExRecordDaoImpl.java @@ -0,0 +1,105 @@ +package com.lyms.platform.biz.dal.impl; + +import com.lyms.platform.biz.dal.IAntExRecordDao; +import com.lyms.platform.common.dao.BaseMongoDAOImpl; +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.common.utils.StringUtils; +import com.lyms.platform.pojo.AntExRecordModel; +import com.lyms.platform.pojo.BabyCheckModel; +import com.lyms.platform.query.AntExRecordQuery; +import com.mongodb.DBCollection; +import com.mongodb.DBObject; +import com.mongodb.MapReduceCommand; +import com.mongodb.MapReduceOutput; +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.query.Criteria; +import org.springframework.stereotype.Repository; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * 产检管理接口 + *

+ *

+ * Created by Administrator on 2016/11/28 0028. + */ +@Repository("antExRecordDao") +public class AntExRecordDaoImpl extends BaseMongoDAOImpl implements IAntExRecordDao { + + /** + * 统计单个医院的产检情况 + * + * @param mongoQuery + * @return + */ + public List aggregateOne(MongoQuery mongoQuery){ + AggregationOperation match = Aggregation.match(/*Criteria.where("hospitalId").is(hospitalId)*/mongoQuery.getCriteria()); + AggregationOperation group = Aggregation.group("checkDoctor").count().as("count"); + + Aggregation aggregation= Aggregation.newAggregation(match, group); + + AggregationResults result = mongoTemplate.aggregate(aggregation,"lyms_antexrecord", HashMap.class); + return result.getMappedResults(); + } + + public void batchAddRecord(List list){ + batchSave(list); + } + + public AntExRecordModel addOneRecord(AntExRecordModel record){ + return save(record); + } + + /** + * 查询符合条件的产检 + * + * @param mongoQuery + * @return + */ + public List queryRecord(MongoQuery mongoQuery) { + return find(mongoQuery.convertToMongoQuery()); + } + + /** + * 根据id删除数据 + * + * @param id + */ + public void deleteById(String id) { + delete(new MongoQuery(new MongoCondition("id", id, MongoOper.IS)).convertToMongoQuery()); + } + + /** + * 获取单挑记录详情 + * + * @param id + */ + public AntExRecordModel findOneById(String id) { + return super.findById(id); + } + + + /** + * 修改单挑记录 + */ + public void updateOneRecord(AntExRecordModel record, String id) { + update(new MongoQuery(new MongoCondition("id", id, MongoOper.IS)).convertToMongoQuery(), record); + } + + /** + * 批量修改数据 + */ + public void batchUpdateRecord(AntExRecordModel record, MongoQuery mongoQuery) { + updateMulti(mongoQuery.convertToMongoQuery(), record); + } + public Integer count(MongoQuery mongoQuery){ + return (int)count(mongoQuery.convertToMongoQuery()); + } +} diff --git a/platform-biz-patient-service/src/main/java/com/lyms/platform/biz/dal/impl/PatientDaoImpl.java b/platform-biz-patient-service/src/main/java/com/lyms/platform/biz/dal/impl/PatientDaoImpl.java index 72296b8..2fed2e7 100644 --- a/platform-biz-patient-service/src/main/java/com/lyms/platform/biz/dal/impl/PatientDaoImpl.java +++ b/platform-biz-patient-service/src/main/java/com/lyms/platform/biz/dal/impl/PatientDaoImpl.java @@ -19,12 +19,13 @@ import org.springframework.data.mongodb.core.query.Query; import org.springframework.data.mongodb.core.query.Update; import org.springframework.stereotype.Repository; +import java.util.HashMap; import java.util.List; /** * 患者模型 - *

- *

+ *

+ *

* Created by Administrator on 2016/4/22 0022. */ @Repository("patientDao") @@ -33,8 +34,9 @@ public class PatientDaoImpl extends BaseMongoDAOImpl implements IPatie public Patients addPatient(Patients obj) { return save(obj); } - public void findAndModify(MongoQuery query,Patients obj){ - updateMulti(query.convertToMongoQuery(),obj); + + public void findAndModify(MongoQuery query, Patients obj) { + updateMulti(query.convertToMongoQuery(), obj); } @Override @@ -78,9 +80,9 @@ public class PatientDaoImpl extends BaseMongoDAOImpl implements IPatie @Override public Patients findLastBuildRecord(String pid, int yn) { AggregationOperation match = Aggregation.match(Criteria.where("pid").is(pid).and("yn").is(yn)); - AggregationOperation group = Aggregation.group("_id","pid","dueDate").max("modified").as("modified"); + AggregationOperation group = Aggregation.group("_id", "pid", "dueDate").max("modified").as("modified"); AggregationOperation fields = Aggregation.project("_id", "pid", "dueDate"); - Aggregation aggregation = Aggregation.newAggregation(match, group,fields); + Aggregation aggregation = Aggregation.newAggregation(match, group, fields); AggregationResults result = this.mongoTemplate.aggregate(aggregation, "lyms_patient", Patients.class); return result.getMappedResults().size() > 0 ? result.getMappedResults().get(0) : null; } @@ -89,4 +91,14 @@ public class PatientDaoImpl extends BaseMongoDAOImpl implements IPatie public void updatePatientByPid(Patients obj, String pid) { update(new MongoQuery(new MongoCondition("pid", pid, MongoOper.IS)).convertToMongoQuery(), obj); } + + public List aggregateOne(MongoQuery mongoQuery) { + AggregationOperation match = Aggregation.match(mongoQuery.getCriteria()); + AggregationOperation group = Aggregation.group("lastCheckEmployeeId").count().as("count"); + + Aggregation aggregation = Aggregation.newAggregation(match, group); + + AggregationResults result = mongoTemplate.aggregate(aggregation, "lyms_patient", HashMap.class); + return result.getMappedResults(); + } } diff --git a/platform-biz-patient-service/src/main/java/com/lyms/platform/biz/service/AntExRecordService.java b/platform-biz-patient-service/src/main/java/com/lyms/platform/biz/service/AntExRecordService.java new file mode 100644 index 0000000..1405667 --- /dev/null +++ b/platform-biz-patient-service/src/main/java/com/lyms/platform/biz/service/AntExRecordService.java @@ -0,0 +1,195 @@ +package com.lyms.platform.biz.service; + +import com.lyms.platform.biz.dal.IAntExRecordDao; +import com.lyms.platform.common.dao.operator.MongoQuery; +import com.lyms.platform.common.enums.YnEnums; +import com.lyms.platform.common.utils.JsonUtil; +import com.lyms.platform.pojo.AntExChuModel; +import com.lyms.platform.pojo.AntExRecordModel; +import com.lyms.platform.pojo.AntenatalExaminationModel; +import com.lyms.platform.pojo.Patients; +import com.lyms.platform.query.AntExChuQuery; +import com.lyms.platform.query.AntExQuery; +import com.lyms.platform.query.AntExRecordQuery; +import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.lang.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; + +/** + * 产检记录 + *

+ * Created by Administrator on 2016/11/28 0028. + */ +@Service +public class AntExRecordService { + + private static final Logger logger = LoggerFactory.getLogger(AntExRecordService.class); + @Autowired + private IAntExRecordDao antExRecordDao; + @Autowired + private AntenatalExaminationService antExService; + @Autowired + private PatientsService patientsService; + + + public List aggregateOne(AntExRecordQuery antExRecordQuery) { + return antExRecordDao.aggregateOne(antExRecordQuery.convertToQuery()); + } + + + /** + * 同步初诊和复诊记录到产检管理里面 + * + * @param hospitalId + */ + public void syncAntRecordToList(String hospitalId) { + AntExQuery antExQuery = new AntExQuery(); + antExQuery.setYn(YnEnums.YES.getId()); + antExQuery.setHospitalId(hospitalId); + + //复诊 + List list = antExService.queryAntenatalExamination(antExQuery.convertToQuery()); + List data = new ArrayList<>(); + for (AntenatalExaminationModel antEx : list) { + AntExRecordModel record = convert(antEx); + if(null!=record){ + data.add(record); + } + if (data.size() == 50) { + antExRecordDao.batchAddRecord(data); + data.clear(); + } + } + if (!data.isEmpty()) { + antExRecordDao.batchAddRecord(data); + data.clear(); + } + + + //初诊 + AntExChuQuery antExChuQuery = new AntExChuQuery(); + antExChuQuery.setYn(YnEnums.YES.getId()); + antExChuQuery.setHospitalId(hospitalId); + List antExChuModelList = antExService.queryAntExChu(antExChuQuery.convertToQuery()); + + if (CollectionUtils.isNotEmpty(antExChuModelList)) { + for (AntExChuModel antEx : antExChuModelList) { + AntExRecordModel record = convert(antEx); + if(null!=record){ + data.add(record); + } + if (data.size() == 50) { + antExRecordDao.batchAddRecord(data); + data.clear(); + } + } + if (!data.isEmpty()) { + antExRecordDao.batchAddRecord(data); + data.clear(); + } + } + } + + + public AntExRecordModel convert(AntenatalExaminationModel antEx) { + AntExRecordModel antExRecordModel = new AntExRecordModel(); + antExRecordModel.setParentId(antEx.getParentId()); + antExRecordModel.setId(antEx.getId()); + antExRecordModel.setType(1); + antExRecordModel.setHospitalId(antEx.getHospitalId()); + antExRecordModel.setCheckDoctor(antEx.getCheckDoctor()); + antExRecordModel.setCheckTime(antEx.getCheckDate()); + antExRecordModel.setPid(antEx.getPid()); + Patients patients = patientsService.findOnePatientById(antEx.getParentId()); + if (null != patients) { + if (patients.getType() == 3 && patients.getFmDate() != null) { + antExRecordModel.setStatus(1); + } + antExRecordModel.setBrith(patients.getBirth()); + antExRecordModel.setDueDate(patients.getDueDate()); + antExRecordModel.setName(patients.getUsername()); + antExRecordModel.sethScore(patients.getRiskScore()); + antExRecordModel.sethRisk(patients.getRiskFactorId()); + antExRecordModel.sethLevel(JsonUtil.toList(patients.getRiskLevelId(), List.class)); + }else{ + logger.info("antex find patient by id is null. parentId:"+antEx.getParentId()); + return null; + } + return antExRecordModel; + } + + public AntExRecordModel convert(AntExChuModel antExChuModel) { + AntExRecordModel antExRecordModel = new AntExRecordModel(); + antExRecordModel.setCheckDoctor(antExChuModel.getProdDoctor()); + antExRecordModel.setHospitalId(antExChuModel.getHospitalId()); + antExRecordModel.setParentId(antExChuModel.getParentId()); + antExRecordModel.setType(2); + antExRecordModel.setPid(antExChuModel.getPid()); + Patients patients = patientsService.findOnePatientById(antExChuModel.getParentId()); + if (null != patients) { + if (patients.getType() == 1) { + antExRecordModel.setStatus(1); + } + antExRecordModel.setDueDate(patients.getDueDate()); + antExRecordModel.setBrith(patients.getBirth()); + antExRecordModel.setName(patients.getUsername()); + antExRecordModel.sethScore(patients.getRiskScore()); + antExRecordModel.sethRisk(patients.getRiskFactorId()); + antExRecordModel.sethLevel(JsonUtil.toList(patients.getRiskLevelId(), List.class)); + }else{ + logger.info("antexc find patient by id is null. parentId:"+antExChuModel.getParentId()); + return null; + } + return antExRecordModel; + } + + + public AntExRecordModel addOneRecord(AntExRecordModel record) { + return antExRecordDao.addOneRecord(record); + } + + /** + * 查询符合条件的产检记录 + * + * @param antExRecordQuery + * @return + */ + public List queryAntExRecords(AntExRecordQuery antExRecordQuery) { + MongoQuery query = antExRecordQuery.convertToQuery(); + if (StringUtils.isNotEmpty(antExRecordQuery.getNeed())) { + antExRecordQuery.mysqlBuild(antExRecordDao.count(query)); + query.start(antExRecordQuery.getOffset()).end(antExRecordQuery.getLimit()); + } + return antExRecordDao.queryRecord(antExRecordQuery.convertToQuery()); + } + + /** + * 修改单条数据 + * + * @param antExRecordModel + * @param id + */ + public void updateOne(AntExRecordModel antExRecordModel, String id) { + antExRecordDao.updateOneRecord(antExRecordModel, id); + } + + /** + * 修改批量数据 + * + * @param record + * @param antExRecordQuery + */ + public void batchUpdate(AntExRecordModel record, AntExRecordQuery antExRecordQuery) { + antExRecordDao.batchUpdateRecord(record, antExRecordQuery.convertToQuery()); + } + + public void deleteOne(String id) { + antExRecordDao.deleteById(id); + } +} \ No newline at end of file diff --git a/platform-biz-patient-service/src/main/java/com/lyms/platform/biz/service/PatientsService.java b/platform-biz-patient-service/src/main/java/com/lyms/platform/biz/service/PatientsService.java index 63f6778..110387f 100644 --- a/platform-biz-patient-service/src/main/java/com/lyms/platform/biz/service/PatientsService.java +++ b/platform-biz-patient-service/src/main/java/com/lyms/platform/biz/service/PatientsService.java @@ -50,6 +50,15 @@ public class PatientsService { iPatientDao.findAndModify(query.convertToQuery(), obj); } + public List aggregateOne(PatientsQuery patientsQuery) { + MongoQuery query = patientsQuery.convertToQuery(); + if (StringUtils.isNotEmpty(patientsQuery.getNeed())) { + patientsQuery.mysqlBuild(iPatientDao.queryPatientCount(query)); + query.start(patientsQuery.getOffset()).end(patientsQuery.getLimit()); + } + return iPatientDao.aggregateOne(query); + } + public List queryPatient(PatientsQuery patientsQuery) { MongoQuery query = patientsQuery.convertToQuery(); if (StringUtils.isNotEmpty(patientsQuery.getNeed())) { diff --git a/platform-common/src/main/java/com/lyms/platform/common/dao/operator/MongoQuery.java b/platform-common/src/main/java/com/lyms/platform/common/dao/operator/MongoQuery.java index 0374a40..fb9f9e3 100644 --- a/platform-common/src/main/java/com/lyms/platform/common/dao/operator/MongoQuery.java +++ b/platform-common/src/main/java/com/lyms/platform/common/dao/operator/MongoQuery.java @@ -6,6 +6,7 @@ import java.util.List; import org.apache.commons.collections.CollectionUtils; import org.springframework.data.domain.Sort; import org.springframework.data.domain.Sort.Direction; +import org.springframework.data.mongodb.core.query.Criteria; import org.springframework.data.mongodb.core.query.Query; /** @@ -25,6 +26,14 @@ public class MongoQuery { // 结束 private int end; + + public Criteria getCriteria(){ + if(null != coniticon){ + return coniticon.getCriteria(); + } + return null; + } + /** * 转换成spring data 的query 对象 * diff --git a/platform-dal/src/main/java/com/lyms/platform/pojo/AntExRecordModel.java b/platform-dal/src/main/java/com/lyms/platform/pojo/AntExRecordModel.java new file mode 100644 index 0000000..59ebe21 --- /dev/null +++ b/platform-dal/src/main/java/com/lyms/platform/pojo/AntExRecordModel.java @@ -0,0 +1,155 @@ +package com.lyms.platform.pojo; + +import org.springframework.data.mongodb.core.mapping.Document; + +import java.io.Serializable; +import java.util.Date; +import java.util.List; + +/** + * 产检记录表 + *

+ * Created by Administrator on 2016/11/28 0028. + */ +@Document(collection = "lyms_antexrecord") +public class AntExRecordModel implements Serializable { + + private String id; + + private String parentId; + + private String hospitalId; + //状态 1 已分娩 2未分娩 + private int status; + //类型 1 初诊 2复诊 + private Integer type; + //产检医生 + private String checkDoctor; + //产检时间 + private Date checkTime; + //孕妇姓名 + private String name; + //生日用于算年龄 + private Date brith; + //预产期 + private Date dueDate; + //高危评分 + private Integer hScore; + //高危等级 + private List hLevel; + //风险因素 + private List hRisk; + private String pid; + + public String getPid() { + return pid; + } + + public void setPid(String pid) { + this.pid = pid; + } + + public String getHospitalId() { + return hospitalId; + } + + public void setHospitalId(String hospitalId) { + this.hospitalId = hospitalId; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getParentId() { + return parentId; + } + + public void setParentId(String parentId) { + this.parentId = parentId; + } + + public int getStatus() { + return status; + } + + public void setStatus(int status) { + this.status = status; + } + + public Integer getType() { + return type; + } + + public void setType(Integer type) { + this.type = type; + } + + public String getCheckDoctor() { + return checkDoctor; + } + + public void setCheckDoctor(String checkDoctor) { + this.checkDoctor = checkDoctor; + } + + public Date getCheckTime() { + return checkTime; + } + + public void setCheckTime(Date checkTime) { + this.checkTime = checkTime; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public Date getBrith() { + return brith; + } + + public void setBrith(Date brith) { + this.brith = brith; + } + + public Date getDueDate() { + return dueDate; + } + + public void setDueDate(Date dueDate) { + this.dueDate = dueDate; + } + + public Integer gethScore() { + return hScore; + } + + public void sethScore(Integer hScore) { + this.hScore = hScore; + } + + public List gethLevel() { + return hLevel; + } + + public void sethLevel(List hLevel) { + this.hLevel = hLevel; + } + + public List gethRisk() { + return hRisk; + } + + public void sethRisk(List hRisk) { + this.hRisk = hRisk; + } +} diff --git a/platform-dal/src/main/java/com/lyms/platform/query/AntExRecordQuery.java b/platform-dal/src/main/java/com/lyms/platform/query/AntExRecordQuery.java new file mode 100644 index 0000000..4f4b196 --- /dev/null +++ b/platform-dal/src/main/java/com/lyms/platform/query/AntExRecordQuery.java @@ -0,0 +1,182 @@ +package com.lyms.platform.query; + +import com.lyms.platform.common.base.IConvertToNativeQuery; +import com.lyms.platform.common.dao.BaseQuery; +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 org.springframework.data.mongodb.core.query.Criteria; + +import java.util.Date; + +/** + * Created by Administrator on 2016/6/21 0021. + */ +public class AntExRecordQuery extends BaseQuery implements IConvertToNativeQuery { + private String parentId; + private String id; + //创建时间 + private String hospitalId; + //孕妇状态 + private Integer status; + private String levelId; + + private Date buildTimeStart; + private Date buildTimeEnd; + private Date dueDateStart; + private Date dueDateEnd; + //大于修改时间 + private Date gteModified; + private Date gteCreated; + private String pid; + + public Integer getStatus() { + return status; + } + + public String getLevelId() { + return levelId; + } + + public void setLevelId(String levelId) { + this.levelId = levelId; + } + + public void setStatus(Integer status) { + this.status = status; + } + + public Date getBuildTimeStart() { + return buildTimeStart; + } + + public void setBuildTimeStart(Date buildTimeStart) { + this.buildTimeStart = buildTimeStart; + } + + public Date getBuildTimeEnd() { + return buildTimeEnd; + } + + public void setBuildTimeEnd(Date buildTimeEnd) { + this.buildTimeEnd = buildTimeEnd; + } + + public Date getGteCreated() { + return gteCreated; + } + + public void setGteCreated(Date gteCreated) { + this.gteCreated = gteCreated; + } + + public Date getGteModified() { + return gteModified; + } + + public void setGteModified(Date gteModified) { + this.gteModified = gteModified; + } + + public String getPid() { + return pid; + } + + public void setPid(String pid) { + this.pid = pid; + } + + public String getHospitalId() { + return hospitalId; + } + + public void setHospitalId(String hospitalId) { + this.hospitalId = hospitalId; + } + + public Date getDueDateStart() { + return dueDateStart; + } + + public void setDueDateStart(Date dueDateStart) { + this.dueDateStart = dueDateStart; + } + + public Date getDueDateEnd() { + return dueDateEnd; + } + + public void setDueDateEnd(Date dueDateEnd) { + this.dueDateEnd = dueDateEnd; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + @Override + public MongoQuery convertToQuery() { + MongoCondition condition = MongoCondition.newInstance(); + if (null != parentId) { + condition = condition.and("parentId", parentId, MongoOper.IS); + } + if (null != id) { + condition = condition.and("id", id, MongoOper.IS); + } + + if (null != status) { + condition = condition.and("status", status, MongoOper.IS); + } + + if (null != hospitalId) { + condition = condition.and("hospitalId", hospitalId, MongoOper.IS); + } + if (null != pid) { + condition = condition.and("pid", pid, MongoOper.IS); + } + + Criteria c = null; + if (null != buildTimeStart) { + c = Criteria.where("checkTime").gte(buildTimeStart); + } + + if (null != buildTimeEnd) { + if (null != c) { + c = c.lte(buildTimeEnd); + } else { + c = Criteria.where("checkTime").lte(buildTimeEnd); + } + } + + if (null != dueDateStart && dueDateEnd != null) { + if (null != c) { + c = c.where("nextCheckTime").gte(dueDateStart).lte(dueDateEnd); + } else { + c = Criteria.where("nextCheckTime").gte(dueDateStart).lte(dueDateEnd); + } + } + + if (null != gteModified && null != gteCreated) { + MongoCondition mongoCondition = new MongoCondition("modified", gteModified, MongoOper.GTE); + MongoCondition condition2 = new MongoCondition("created", gteCreated, MongoOper.GTE); + condition = condition.orCondition(new MongoCondition[]{mongoCondition, condition2}); + } + + if (null != c) { + condition = condition.andCondition(new MongoCondition(c)); + } + return condition.toMongoQuery(); + } + + public String getParentId() { + return parentId; + } + + public void setParentId(String parentId) { + this.parentId = parentId; + } +} diff --git a/platform-dal/src/main/java/com/lyms/platform/query/PatientsQuery.java b/platform-dal/src/main/java/com/lyms/platform/query/PatientsQuery.java index b7edfc2..7f94fe2 100644 --- a/platform-dal/src/main/java/com/lyms/platform/query/PatientsQuery.java +++ b/platform-dal/src/main/java/com/lyms/platform/query/PatientsQuery.java @@ -105,6 +105,8 @@ public class PatientsQuery extends BaseQuery implements IConvertToNativeQuery { //医院id private List hospitalList; + + public String getProvinceRegisterId() { return provinceRegisterId; } @@ -323,10 +325,19 @@ public class PatientsQuery extends BaseQuery implements IConvertToNativeQuery { //最后一次产检医生职工ID private String lastCheckEmployeeId; + //排除最后一次产检员工id不为空的情况 + private boolean lastCheckEId; //建档医生 private String bookbuildingDoctor; + public boolean isLastCheckEId() { + return lastCheckEId; + } + + public void setLastCheckEId(boolean lastCheckEId) { + this.lastCheckEId = lastCheckEId; + } public String getLastCheckEmployeeId() { return lastCheckEmployeeId; @@ -718,6 +729,10 @@ public class PatientsQuery extends BaseQuery implements IConvertToNativeQuery { if (lastCheckEmployeeId != null) { condition = condition.and("lastCheckEmployeeId", lastCheckEmployeeId, MongoOper.IS); } + else if(lastCheckEId){ + condition = condition.and("lastCheckEmployeeId", "", MongoOper.NE); + condition = condition.andCondition(MongoCondition.newInstance("lastCheckEmployeeId", null, MongoOper.NE)); + } if (bookbuildingDoctor != null) { condition = condition.and("bookbuildingDoctor", bookbuildingDoctor, MongoOper.IS); } diff --git a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/controller/StatisticsController.java b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/controller/StatisticsController.java index 2888cff..339f837 100644 --- a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/controller/StatisticsController.java +++ b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/controller/StatisticsController.java @@ -2,10 +2,14 @@ package com.lyms.platform.operate.web.controller; import com.lyms.platform.common.annotation.TokenRequired; import com.lyms.platform.common.base.BaseController; +import com.lyms.platform.common.base.LoginContext; import com.lyms.platform.common.constants.ErrorCodeConstants; +import com.lyms.platform.common.result.BaseResponse; import com.lyms.platform.common.utils.DateUtil; import com.lyms.platform.common.utils.JsonUtil; import com.lyms.platform.common.utils.ResultUtils; +import com.lyms.platform.operate.web.facade.AntExRecordFacade; +import com.lyms.platform.operate.web.request.CjStatisticsQueryRequest; import com.lymsh.platform.reportdata.model.AreaData; import com.lymsh.platform.reportdata.model.AreaDataQuery; import com.lymsh.platform.reportdata.model.echarts.*; @@ -15,12 +19,11 @@ import org.apache.commons.lang.StringUtils; import org.joda.time.DateTime; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.*; +import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import javax.validation.Valid; import java.util.*; /** @@ -32,6 +35,8 @@ public class StatisticsController extends BaseController { @Autowired private StatisticsService statisticsService; + @Autowired + private AntExRecordFacade antExRecordFacade; @@ -1155,4 +1160,17 @@ public class StatisticsController extends BaseController { writeJson(response, JsonUtil.obj2JsonString(map)); } + @RequestMapping(value = "/syncToAntExRecord", method = RequestMethod.GET) + @ResponseBody + public String syncToAntExRecord(@RequestParam String hId){ + antExRecordFacade.syncAntRecordToList(hId); + return "sysc finish."; + } + @RequestMapping(value = "/cjStatistics", method = RequestMethod.GET) + @ResponseBody + @TokenRequired + public BaseResponse cjStatistics(HttpServletRequest request,@Valid CjStatisticsQueryRequest statisticsQueryRequest){ + LoginContext loginState = (LoginContext) request.getAttribute("loginContext"); + return antExRecordFacade.queryStatis(loginState.getId(),statisticsQueryRequest); + } } diff --git a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/facade/AntExRecordFacade.java b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/facade/AntExRecordFacade.java new file mode 100644 index 0000000..24377fc --- /dev/null +++ b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/facade/AntExRecordFacade.java @@ -0,0 +1,192 @@ +package com.lyms.platform.operate.web.facade; + +import com.lyms.platform.biz.service.AntExRecordService; +import com.lyms.platform.biz.service.BasicConfigService; +import com.lyms.platform.biz.service.PatientsService; +import com.lyms.platform.common.constants.ErrorCodeConstants; +import com.lyms.platform.common.enums.RiskDefaultTypeEnum; +import com.lyms.platform.common.enums.YnEnums; +import com.lyms.platform.common.result.BaseListResponse; +import com.lyms.platform.common.result.BaseResponse; +import com.lyms.platform.common.utils.DateUtil; +import com.lyms.platform.common.utils.ExceptionUtils; +import com.lyms.platform.common.utils.JsonUtil; +import com.lyms.platform.common.utils.StringUtils; +import com.lyms.platform.operate.web.request.CjStatisticsQueryRequest; +import com.lyms.platform.operate.web.result.CjStatisticsListResult; +import com.lyms.platform.operate.web.result.CjStatisticsResult; +import com.lyms.platform.operate.web.result.HighScoreResult; +import com.lyms.platform.permission.model.Users; +import com.lyms.platform.permission.service.UsersService; +import com.lyms.platform.pojo.AntExRecordModel; +import com.lyms.platform.pojo.BasicConfig; +import com.lyms.platform.pojo.Patients; +import com.lyms.platform.query.AntExRecordQuery; +import com.lyms.platform.query.PatientsQuery; +import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.lang.math.NumberUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * 产检管理 + *

+ * Created by Administrator on 2016/11/28 0028. + */ +@Component +public class AntExRecordFacade { + + @Autowired + private AntExRecordService recordService; + @Autowired + private AutoMatchFacade autoMatchFacade; + @Autowired + private UsersService usersService; + @Autowired + private PatientsService patientsService; + @Autowired + private BasicConfigService basicConfigService; + + public void syncAntRecordToList(String hospitalId) { + recordService.syncAntRecordToList(hospitalId); + } + + /** + * + * 产检统计 + * + * @param userId + * @return + */ + public BaseResponse queryStatis(Integer userId,CjStatisticsQueryRequest statisticsQueryRequest) { + BaseListResponse baseListResponse = new BaseListResponse(); + List data = new ArrayList<>(); + + String hospitalId = autoMatchFacade.getHospitalId(userId); + if(StringUtils.isEmpty(hospitalId)){ + baseListResponse.setErrormsg("获取医院id为空").setErrorcode(ErrorCodeConstants.SUCCESS); + return baseListResponse; + } + + PatientsQuery patientsQuery1=new PatientsQuery(); + patientsQuery1.setLastCheckEId(true); + patientsQuery1.setHospitalId(hospitalId); + patientsQuery1.setYn(YnEnums.YES.getId()); + patientsQuery1.setNeed("1"); + patientsQuery1.setPage(statisticsQueryRequest.getPage()); + patientsQuery1.setLimit(statisticsQueryRequest.getLimit()); + patientsQuery1.setrLevel(statisticsQueryRequest.getLevelId()); + patientsQuery1.setLastCheckEmployeeId(statisticsQueryRequest.getdId()); + List buildType = new ArrayList(); + buildType.add(0); + buildType.add(2); + patientsQuery1.setBuildTypeList(buildType); + if(null!=statisticsQueryRequest.getStatus()){ + //1 + if(1==statisticsQueryRequest.getStatus()){ + patientsQuery1.setType(3); + }else if(2==statisticsQueryRequest.getStatus()){ + patientsQuery1.setType(1); + } + } + + //建档时间查询 + if (org.apache.commons.lang.StringUtils.isNotEmpty(statisticsQueryRequest.getbTime())) { + String nextDateStr = statisticsQueryRequest.getbTime(); + String[] dates = nextDateStr.split(" - "); + + patientsQuery1.setBookbuildingDateStart(DateUtil.parseYMD(dates[0])); + if (dates.length == 2) { + patientsQuery1.setBookbuildingDateEnd(DateUtil.parseYMD(dates[1])); + } + } + + //预产期查询 + if (org.apache.commons.lang.StringUtils.isNotEmpty(statisticsQueryRequest.getDueDate())) { + String nextDateStr = statisticsQueryRequest.getDueDate(); + String[] dates = nextDateStr.split(" - "); + + patientsQuery1.setDueDateStart(DateUtil.parseYMD(dates[0])); + if (dates.length == 2) { + patientsQuery1.setDueDateEnd(DateUtil.parseYMD(dates[1])); + } + } + + if(statisticsQueryRequest.getType()==1){ + List patientses= patientsService.queryPatient(patientsQuery1); + if(CollectionUtils.isNotEmpty(patientses)){ + for(Patients record:patientses){ + CjStatisticsListResult cjStatisticsListResult=new CjStatisticsListResult(); + cjStatisticsListResult.convertToResult(record); + Users users = usersService.getUsers(NumberUtils.toInt(record.getLastCheckEmployeeId())); + if (null != users) { + cjStatisticsListResult.setCheckDoctor(users.getName()); + } + List factor = record.getRiskFactorId(); + + if (CollectionUtils.isNotEmpty(factor)) { + StringBuilder sb = new StringBuilder(56); + for (String srt : factor) { + if (org.apache.commons.lang.StringUtils.isNotEmpty(srt)) { + BasicConfig basicConfig = basicConfigService.getOneBasicConfigById(srt); + if (null != basicConfig && sb.indexOf(basicConfig.getName()) == -1) { + sb.append(basicConfig.getName()).append(','); + } + } + } + if (sb.toString().endsWith(",")) { + cjStatisticsListResult.setrRisk(sb.substring(0, sb.length() - 1)); + } else { + cjStatisticsListResult.setrRisk(sb.toString()); + } + } + List level = new ArrayList(); + if (org.apache.commons.lang.StringUtils.isNotEmpty(record.getRiskLevelId())) { + try { + List list = JsonUtil.jkstr2Obj(record.getRiskLevelId(), List.class); + for (String str : list) { + BasicConfig basicConfig = basicConfigService.getOneBasicConfigById(str); + if (null != basicConfig) { + Map map = new HashMap(); + String name = basicConfig.getName(); + if (name.indexOf("预警") > -1) { + name = name.replace("预警", ""); + } + map.put("name",name); + map.put("color", "risk_" + RiskDefaultTypeEnum.getColor(name)); + level.add(map); + } + } + } catch (Exception e) { + ExceptionUtils.catchException(e, "patients.getRiskLevelId error."); + } + cjStatisticsListResult.setrLevel(HighScoreResult.getLevelStr(HighScoreResult.filter(level))); + } + data.add(cjStatisticsListResult); + } + } + }else { + List list = patientsService.aggregateOne(patientsQuery1); + for (HashMap map : list) { + CjStatisticsResult cjStatisticsResult = new CjStatisticsResult(); + String dId = map.get("_id").toString(); + cjStatisticsResult.setdId(dId); + cjStatisticsResult.setCount(map.get("count").toString()); + try { + Users users = usersService.getUsers(Integer.valueOf(dId)); + if (null != users) { + cjStatisticsResult.setdName(users.getName()); + } + } catch (Exception e) { + } + data.add(cjStatisticsResult); + } + } + return baseListResponse.setErrormsg("成功").setErrorcode(ErrorCodeConstants.SUCCESS).setData(data); + } +} \ No newline at end of file diff --git a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/request/BasePageQueryRequest.java b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/request/BasePageQueryRequest.java index 9253ee0..583006e 100644 --- a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/request/BasePageQueryRequest.java +++ b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/request/BasePageQueryRequest.java @@ -22,13 +22,13 @@ public class BasePageQueryRequest extends BaseModel { @Min(value = 1, message = "page.min") @FormParam @NotNull(message = "page.not.null") - protected Integer page; + protected Integer page=1; @NotNull(message = "page.limit.not.null") @Min(value = 1, message = "page.min") @Max(value = 10000, message = "page.max") @FormParam - protected Integer limit; + protected Integer limit=15; public Integer getPage() { return page; diff --git a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/request/CjStatisticsQueryRequest.java b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/request/CjStatisticsQueryRequest.java new file mode 100644 index 0000000..b666a66 --- /dev/null +++ b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/request/CjStatisticsQueryRequest.java @@ -0,0 +1,69 @@ +package com.lyms.platform.operate.web.request; + +/** + * + * 产检统计id + * Created by Administrator on 2016/11/28 0028. + */ +public class CjStatisticsQueryRequest extends BasePageQueryRequest{ + //0 统计 1 类别 + private int type=0; + //风险等级 + private String levelId; + //预产期 + private String dueDate; + //建档时间 + private String bTime; + //分娩状态 1 已分娩 2 未分娩 + private Integer status; + //医生id + private String dId; + + public String getdId() { + return dId; + } + + public void setdId(String dId) { + this.dId = dId; + } + + public int getType() { + return type; + } + + public void setType(int type) { + this.type = type; + } + + public String getLevelId() { + return levelId; + } + + public void setLevelId(String levelId) { + this.levelId = levelId; + } + + public String getDueDate() { + return dueDate; + } + + public void setDueDate(String dueDate) { + this.dueDate = dueDate; + } + + public String getbTime() { + return bTime; + } + + public void setbTime(String bTime) { + this.bTime = bTime; + } + + public Integer getStatus() { + return status; + } + + public void setStatus(Integer status) { + this.status = status; + } +} diff --git a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/result/CjStatisticsListResult.java b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/result/CjStatisticsListResult.java new file mode 100644 index 0000000..4c6b3ec --- /dev/null +++ b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/result/CjStatisticsListResult.java @@ -0,0 +1,129 @@ +package com.lyms.platform.operate.web.result; + +import com.lyms.platform.common.utils.DateUtil; +import com.lyms.platform.common.utils.StringUtils; +import com.lyms.platform.pojo.AntExRecordModel; +import com.lyms.platform.pojo.Patients; +import org.codehaus.jackson.annotate.JsonIgnore; + +import java.util.Date; + +/** + * Created by Administrator on 2016/11/29 0029. + */ +public class CjStatisticsListResult { + + private String id; + + private String pid; + //名字 + private String name; + //孕周 + private String dueWeek; + //预产期 + private String dueDate; + + private Integer score; + //等级 + private String rLevel; + //因素 + private String rRisk; + //产检医生 + private String checkDoctor; + //类型 + @JsonIgnore + private Integer type; + + public CjStatisticsListResult convertToResult(Patients record) { + setDueDate(DateUtil.getyyyy_MM_dd(record.getDueDate())); + if(null!=record.getLastMenses()){ + int days= DateUtil.daysBetween(record.getLastMenses(),new Date()); + this.dueWeek= StringUtils.dueWeek(days); + } + setId(record.getId()); + setName(record.getUsername()); + setPid(record.getPid()); + setScore(record.getRiskScore()); + setType(record.getType()); + return this; + } + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getPid() { + return pid; + } + + public void setPid(String pid) { + this.pid = pid; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getDueWeek() { + return dueWeek; + } + + public void setDueWeek(String dueWeek) { + this.dueWeek = dueWeek; + } + + public String getDueDate() { + return dueDate; + } + + public void setDueDate(String dueDate) { + this.dueDate = dueDate; + } + + public Integer getScore() { + return score; + } + + public void setScore(Integer score) { + this.score = score; + } + + public String getrLevel() { + return rLevel; + } + + public void setrLevel(String rLevel) { + this.rLevel = rLevel; + } + + public String getrRisk() { + return rRisk; + } + + public void setrRisk(String rRisk) { + this.rRisk = rRisk; + } + + public String getCheckDoctor() { + return checkDoctor; + } + + public void setCheckDoctor(String checkDoctor) { + this.checkDoctor = checkDoctor; + } + + public Integer getType() { + return type; + } + + public void setType(Integer type) { + this.type = type; + } +} diff --git a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/result/CjStatisticsResult.java b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/result/CjStatisticsResult.java new file mode 100644 index 0000000..b1922d8 --- /dev/null +++ b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/result/CjStatisticsResult.java @@ -0,0 +1,40 @@ +package com.lyms.platform.operate.web.result; + +/** + * + * 产检统计 + * Created by Administrator on 2016/11/28 0028. + */ +public class CjStatisticsResult { + private String dId; + private String dName; + private String count; + + public String getdId() { + return dId; + } + + public void setdId(String dId) { + this.dId = dId; + } + + public String getdName() { + return dName; + } + + public void setdName(String dName) { + this.dName = dName; + } + + public String getCount() { + + if(null==count){ + return "0"; + } + return count; + } + + public void setCount(String count) { + this.count = count; + } +} diff --git a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/result/HighScoreResult.java b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/result/HighScoreResult.java index a02f0aa..5ae666b 100644 --- a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/result/HighScoreResult.java +++ b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/result/HighScoreResult.java @@ -131,7 +131,7 @@ public class HighScoreResult { return stringBuilder.toString(); } - public String getLevelStr(List levelList) { + public static String getLevelStr(List levelList) { StringBuilder stringBuilder = new StringBuilder(); if (null == levelList) { return ""; -- 1.8.3.1