diff --git a/platform-biz-patient-service/src/main/java/com/lyms/platform/biz/dal/IBloodPressureDao.java b/platform-biz-patient-service/src/main/java/com/lyms/platform/biz/dal/IBloodPressureDao.java new file mode 100644 index 0000000..3c79d5f --- /dev/null +++ b/platform-biz-patient-service/src/main/java/com/lyms/platform/biz/dal/IBloodPressureDao.java @@ -0,0 +1,15 @@ +package com.lyms.platform.biz.dal; + +import com.lyms.platform.pojo.BloodPressure; +import org.springframework.data.mongodb.core.query.Query; + +/** + * 血压 + */ +public interface IBloodPressureDao { + + void add(BloodPressure bloodPressure); + + void updateXy(Query query, BloodPressure bloodPressure); + +} diff --git a/platform-biz-patient-service/src/main/java/com/lyms/platform/biz/dal/impl/BloodPressureDaoImpl.java b/platform-biz-patient-service/src/main/java/com/lyms/platform/biz/dal/impl/BloodPressureDaoImpl.java new file mode 100644 index 0000000..c982a51 --- /dev/null +++ b/platform-biz-patient-service/src/main/java/com/lyms/platform/biz/dal/impl/BloodPressureDaoImpl.java @@ -0,0 +1,22 @@ +package com.lyms.platform.biz.dal.impl; + +import com.lyms.platform.biz.dal.IBloodPressureDao; +import com.lyms.platform.common.dao.BaseMongoDAOImpl; +import com.lyms.platform.pojo.BloodPressure; +import org.springframework.data.mongodb.core.query.Query; +import org.springframework.stereotype.Repository; + +@Repository +public class BloodPressureDaoImpl extends BaseMongoDAOImpl implements IBloodPressureDao { + + @Override + public void add(BloodPressure bloodPressure) { + save(bloodPressure); + } + + @Override + public void updateXy(Query query, BloodPressure bloodPressure) { + update(query, bloodPressure); + } + +} diff --git a/platform-biz-patient-service/src/main/java/com/lyms/platform/biz/service/BloodPressureService.java b/platform-biz-patient-service/src/main/java/com/lyms/platform/biz/service/BloodPressureService.java new file mode 100644 index 0000000..d4c1981 --- /dev/null +++ b/platform-biz-patient-service/src/main/java/com/lyms/platform/biz/service/BloodPressureService.java @@ -0,0 +1,25 @@ +package com.lyms.platform.biz.service; + + +import com.lyms.platform.biz.dal.IBloodPressureDao; +import com.lyms.platform.pojo.BloodPressure; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.mongodb.core.query.Criteria; +import org.springframework.data.mongodb.core.query.Query; +import org.springframework.stereotype.Service; + +@Service +public class BloodPressureService { + + @Autowired + private IBloodPressureDao bloodPressureDao; + + public void add(BloodPressure bloodPressure) { + bloodPressureDao.add(bloodPressure); + } + + public void update(BloodPressure bloodPressure) { + bloodPressureDao.updateXy(Query.query(Criteria.where("id").is(bloodPressure.getId())), bloodPressure); + } + +} diff --git a/platform-dal/src/main/java/com/lyms/platform/beans/SerialIdEnum.java b/platform-dal/src/main/java/com/lyms/platform/beans/SerialIdEnum.java index 1f088f6..fc7e271 100644 --- a/platform-dal/src/main/java/com/lyms/platform/beans/SerialIdEnum.java +++ b/platform-dal/src/main/java/com/lyms/platform/beans/SerialIdEnum.java @@ -57,6 +57,7 @@ public enum SerialIdEnum { PatientCheckTicket("PatientCheckTicket", 97531000450L), AntExPRecordModel("AntExPRecordModel", 97531000451L), PatientWeight("PatientWeight", 97531000111L), + BloodPressure("BloodPressure", 97531333111L), last("last", 97531009990L); private String cname; private Long cid; diff --git a/platform-dal/src/main/java/com/lyms/platform/pojo/BloodPressure.java b/platform-dal/src/main/java/com/lyms/platform/pojo/BloodPressure.java new file mode 100644 index 0000000..7432d55 --- /dev/null +++ b/platform-dal/src/main/java/com/lyms/platform/pojo/BloodPressure.java @@ -0,0 +1,128 @@ +package com.lyms.platform.pojo; + +import com.lyms.platform.beans.SerialIdEnum; +import com.lyms.platform.common.result.BaseModel; +import org.springframework.data.mongodb.core.mapping.Document; + +import java.util.Date; +import java.util.Map; + +/** + * 血压 + */ +@Document(collection="lyms_blood_pressure") +public class BloodPressure extends BaseModel { + + private static final long serialVersionUID = SerialIdEnum.PatientWeight.getCid(); + + private String id; + + private String parentId; + + private Date created; + + private Date modified; + + private Integer yn; + + private Integer operaterId; + + private String hospitalId; + + // 舒张压 + private String szy; + // 收缩压 + private String ssy; + // 脉搏 + private Integer pulse; + + private Map> infos; + + public String getSzy() { + return szy; + } + + public void setSzy(String szy) { + this.szy = szy; + } + + public String getSsy() { + return ssy; + } + + public void setSsy(String ssy) { + this.ssy = ssy; + } + + public Integer getPulse() { + return pulse; + } + + public void setPulse(Integer pulse) { + this.pulse = pulse; + } + + 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 Date getCreated() { + return created; + } + + public void setCreated(Date created) { + this.created = created; + } + + public Date getModified() { + return modified; + } + + public void setModified(Date modified) { + this.modified = modified; + } + + public Integer getYn() { + return yn; + } + + public void setYn(Integer yn) { + this.yn = yn; + } + + public Integer getOperaterId() { + return operaterId; + } + + public void setOperaterId(Integer operaterId) { + this.operaterId = operaterId; + } + + public String getHospitalId() { + return hospitalId; + } + + public void setHospitalId(String hospitalId) { + this.hospitalId = hospitalId; + } + + public Map> getInfos() { + return infos; + } + + public void setInfos(Map> infos) { + this.infos = infos; + } +} diff --git a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/controller/BloodPressureController.java b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/controller/BloodPressureController.java new file mode 100644 index 0000000..d238773 --- /dev/null +++ b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/controller/BloodPressureController.java @@ -0,0 +1,49 @@ +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.result.BaseResponse; +import com.lyms.platform.operate.web.service.IBloodPressureService; +import com.lyms.platform.pojo.BloodPressure; +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.ResponseBody; + +import javax.servlet.http.HttpServletRequest; + +/** + * 血压 + */ +@Controller +@RequestMapping("/xy") +public class BloodPressureController extends BaseController { + + @Autowired + private IBloodPressureService bloodPressureService; + + @ResponseBody + @RequestMapping(method = RequestMethod.POST) + @TokenRequired + public BaseResponse addOrUpdate(BloodPressure bloodPressure, HttpServletRequest request) { + return bloodPressureService.addOrUpdate(getUserId(request), bloodPressure); + } + + @ResponseBody + @RequestMapping(method = RequestMethod.GET) + @TokenRequired + public BaseResponse list(String key, String vcCardNo, Integer weekStart, Integer weekEnd, Integer age, Integer page, Integer limit, HttpServletRequest request) { + return bloodPressureService.list(key, vcCardNo, weekStart, weekEnd, age, page, limit, getUserId(request)); + } + + @ResponseBody + @RequestMapping(value = "/{id}", method = RequestMethod.GET) + @TokenRequired + public BaseResponse info(@PathVariable String id) { + return bloodPressureService.info(id); + } + + +} diff --git a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/service/IBloodPressureService.java b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/service/IBloodPressureService.java new file mode 100644 index 0000000..60580de --- /dev/null +++ b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/service/IBloodPressureService.java @@ -0,0 +1,13 @@ +package com.lyms.platform.operate.web.service; + +import com.lyms.platform.common.result.BaseResponse; +import com.lyms.platform.pojo.BloodPressure; + +public interface IBloodPressureService extends IBaseService { + + BaseResponse addOrUpdate(Integer userId, BloodPressure bloodPressure); + + BaseResponse list(String key, String vcCardNo, Integer weekStart, Integer weekEnd, Integer age, Integer page, Integer limit, Integer userId); + + BaseResponse info(String id); +} diff --git a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/service/impl/BloodPressureServiceImpl.java b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/service/impl/BloodPressureServiceImpl.java new file mode 100644 index 0000000..f28ca9e --- /dev/null +++ b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/service/impl/BloodPressureServiceImpl.java @@ -0,0 +1,174 @@ +package com.lyms.platform.operate.web.service.impl; + +import com.lyms.platform.biz.service.BloodPressureService; +import com.lyms.platform.biz.service.CommonService; +import com.lyms.platform.common.enums.YnEnums; +import com.lyms.platform.common.result.BaseResponse; +import com.lyms.platform.common.result.PageResult; +import com.lyms.platform.common.result.RespBuilder; +import com.lyms.platform.common.utils.DateUtil; +import com.lyms.platform.common.utils.StringUtils; +import com.lyms.platform.operate.web.facade.AccessPermissionFacade; +import com.lyms.platform.operate.web.facade.AutoMatchFacade; +import com.lyms.platform.operate.web.service.IBloodPressureService; +import com.lyms.platform.operate.web.utils.CollectionUtils; +import com.lyms.platform.operate.web.utils.MongoUtil; +import com.lyms.platform.pojo.BloodPressure; +import com.lyms.platform.pojo.Patients; +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.Service; + +import java.util.*; + +@Service +public class BloodPressureServiceImpl extends BaseServiceImpl implements IBloodPressureService { + + @Autowired + private BloodPressureService bloodPressureService; + + @Autowired + private MongoTemplate mongoTemplate; + + @Autowired + private AutoMatchFacade autoMatchFacade; + + @Autowired + private MongoUtil mongoUtil; + + @Autowired + private CommonService commonService; + + @Autowired + private AccessPermissionFacade accessPermissionFacade; + + + public BaseResponse addOrUpdate(Integer userId, BloodPressure bloodPressure) { + String hospitalId = autoMatchFacade.getHospitalId(userId); + Map temp = new LinkedHashMap<>(); + temp.put("szy", bloodPressure.getSzy()); + temp.put("ssy", bloodPressure.getSsy()); + temp.put("pulse", bloodPressure.getPulse()); + temp.put("hospitalId", hospitalId); + if(StringUtils.isEmpty(bloodPressure.getId())) { + String parentId = mongoUtil.doHidePatient(bloodPressure.getParentId(), hospitalId); + bloodPressure.setParentId(parentId); + bloodPressure.setYn(YnEnums.YES.getId()); + bloodPressure.setCreated(new Date()); + bloodPressure.setHospitalId(hospitalId); + bloodPressure.setOperaterId(userId); + Map> infos = new LinkedHashMap<>(); + infos.put(DateUtil.getyyyy_MM_dd(new Date()), temp); + bloodPressure.setInfos(infos); + bloodPressureService.add(bloodPressure); + } else { + Map> infos = mongoTemplate.findById(bloodPressure.getId(), BloodPressure.class).getInfos(); + infos.put(DateUtil.getyyyy_MM_dd(new Date()), temp); + bloodPressureService.update(bloodPressure); + } + return RespBuilder.buildSuccess(); + } + + @Override + public BaseResponse list(String key, String vcCardNo, Integer weekStart, Integer weekEnd, Integer age, Integer page, Integer limit, Integer userId) { + List hospitalIds = accessPermissionFacade.getCurrentUserHospPermissions(userId); + Criteria criteria = Criteria.where("yn").ne("0").and("hospitalId").in(hospitalIds); + Criteria pCriteria = Criteria.where("yn").ne("0").and("hospitalId").in(hospitalIds); + if(StringUtils.isNotEmpty(key)) { + pCriteria.orOperator(Criteria.where("phone").regex(key), Criteria.where("username").regex(key), Criteria.where("cardNo").is(key)); + } + if(StringUtils.isNotEmpty(vcCardNo)) { + pCriteria.and("vcCardNo").is(vcCardNo); + } + if(weekStart != null && weekEnd != null) { + Date start = DateUtil.getWeekStart(weekEnd); + Date end = DateUtil.getWeekEnd(weekStart); + pCriteria.and("lastMenses").gt(start).lte(end); + } + if(age != null) { + Date start = DateUtil.getBeforeAge(age); + Date end = DateUtil.getBeforeAge(age + 1); + pCriteria.and("birth").gt(end).lte(start); + } + List patients = mongoTemplate.find(Query.query(pCriteria), Patients.class); + List ids = new ArrayList<>(); + if(CollectionUtils.isNotEmpty(patients)) { + for (Patients patient : patients) { + ids.add(patient.getId()); + } + } + criteria.and("parentId").in(ids); + PageResult pageResult = findMongoPage(BloodPressure.class, new Query(criteria).with(new Sort(Sort.Direction.DESC, "created")), page, limit); + List bloodPressures = (List) pageResult.getGrid(); + List> restList = new ArrayList<>(); + for (BloodPressure bloodPressure : bloodPressures) { + Map temp = new HashMap<>(); + Patients p = mongoTemplate.findById(bloodPressure.getParentId(), Patients.class); + temp.put("id", bloodPressure.getId()); + if(p != null) { + temp.put("username", p.getUsername()); + temp.put("age", DateUtil.getAge(p.getBirth())); + temp.put("week", DateUtil.getWeekDesc(p.getLastMenses(), new Date())); + temp.put("riskLevel", mongoUtil.getRiskLevels(p)); //高危等级(颜色) + temp.put("riskFactor", mongoUtil.getRiskFactor(p)); // 高危因素 + temp.put("dueDate", DateUtil.getyyyy_MM_dd(p.getDueDate())); + temp.put("bloodPressure", bloodPressure.getSsy() + "/" + bloodPressure.getSzy() + "mmHg"); + temp.put("pulse", bloodPressure.getPulse()); + temp.put("status", getPulseStatus(bloodPressure.getSsy(), bloodPressure.getSzy())); + } + restList.add(temp); + } + pageResult.setGrid(restList); + return RespBuilder.buildSuccess(pageResult); + } + + @Override + public BaseResponse info(String id) { + BloodPressure bloodPressure = mongoTemplate.findById(id, BloodPressure.class); + List> xyInfos = new ArrayList<>(); + List>> lines = new ArrayList<>(); + List szyMin = Arrays.asList( 60, 60, 60, 60, 60, 60); + List ssyMax = Arrays.asList(140, 140, 140, 140, 140, 140); + List ssy = new ArrayList<>(); + List szy = new ArrayList<>(); + List pulse = new ArrayList<>(); + List xAxis = new ArrayList<>(); + if(bloodPressure != null) { + List betweenDay = DateUtil.getBetweenDay(7); + Map> infos = bloodPressure.getInfos(); + for (String date : betweenDay) { + Map temp = new HashMap<>(); + xyInfos.add(temp); + + temp.put("date", date); + temp.put("ssy", infos.containsKey(date) ? infos.get(date).get("ssy") : "--"); + temp.put("szy", infos.containsKey(date) ? infos.get(date).get("szy") : "--"); + + xAxis.add(date.replace("-", "/")); + ssy.add(infos.containsKey(date) ? infos.get(date).get("ssy") : 0); + szy.add(infos.containsKey(date) ? infos.get(date).get("szy") : 0); + pulse.add(infos.containsKey(date) ? (Integer) infos.get(date).get("pulse") : 0); + } + } + + return RespBuilder.buildSuccess("xyInfos", xyInfos, "szyMin", szyMin, "ssyMax", ssyMax, "ssy", ssy, "szy", szy, pulse); + } + + private String getPulseStatus(String ssy, String szy) { + String status = ""; + if(StringUtils.isNotEmpty(ssy) && StringUtils.isNotEmpty(szy)) { + if(Double.parseDouble(ssy) < 90 || Double.parseDouble(szy) < 60) { + status = "低血压"; + } else if(Double.parseDouble(ssy) > 140 || Double.parseDouble(szy) < 90) { + status = "高血压"; + } else { + status = "正常"; + } + } + return status; + } + +} diff --git a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/utils/MongoUtil.java b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/utils/MongoUtil.java index 966e45f..13c298a 100644 --- a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/utils/MongoUtil.java +++ b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/utils/MongoUtil.java @@ -1,8 +1,11 @@ package com.lyms.platform.operate.web.utils; +import com.alibaba.fastjson.JSONArray; import com.lyms.platform.biz.service.BabyBookbuildingService; +import com.lyms.platform.biz.service.PatientsService; import com.lyms.platform.common.enums.RiskDefaultTypeEnum; import com.lyms.platform.common.utils.DateUtil; +import com.lyms.platform.common.utils.JsonUtil; import com.lyms.platform.common.utils.StringUtils; import com.lyms.platform.operate.web.facade.AccessPermissionFacade; import com.lyms.platform.operate.web.facade.AutoMatchFacade; @@ -51,6 +54,9 @@ public class MongoUtil { @Autowired private CouponMapper couponMapper; + @Autowired + private PatientsService patientsService; + public void setIdNames(List basicConfigs, List> restList) { for (BasicConfig config : basicConfigs) { Map temp = new HashMap<>(); @@ -520,4 +526,60 @@ public class MongoUtil { } return restList; } + + /** + * 隐藏建档 + */ + public String doHidePatient(String parentId, String hospitalId) { + Patients patients = mongoTemplate.findById(parentId, Patients.class); + if(patients != null && !hospitalId.equals(patients.getHospitalId())) { + patients.setId(null); + patients.setHospitalId(hospitalId); + patients.setEnable("2"); + patients.setSource(patients.getId()); + patients.setCreated(new Date()); + patientsService.addPatient(patients); + } + return patients.getId(); + } + + /** + * 获取高危等级(颜色) + */ + public List getRiskLevels(Patients p) { + List colors = new ArrayList<>(); + if (p != null && StringUtils.isNotEmpty(p.getRiskLevelId())) { + List ids = JsonUtil.jkstr2Obj(p.getRiskLevelId(), List.class); + if(CollectionUtils.isNotEmpty(ids)) { + for (String id : ids) { + String name = findName(id); + if(StringUtils.isNotEmpty(name)) { + colors.add( "risk_" + RiskDefaultTypeEnum.getColor(name)); + } + } + } + } + return colors; + } + + /** + * 获取高危因素 + */ + public String getRiskFactor(Patients p) { + StringBuilder sb = new StringBuilder(); + if (p != null && CollectionUtils.isNotEmpty(p.getRiskFactorId())) { + List ids = p.getRiskFactorId(); + if(CollectionUtils.isNotEmpty(ids)) { + for (String id : ids) { + String name = findName(id); + if(StringUtils.isNotEmpty(name)) { + sb.append(name); + } + } + } + } + return sb.length() > 0 ? sb.substring(0, sb.length() - 1).toString() : sb.toString(); + } + + }