package com.bofeng.service; import com.baomidou.mybatisplus.toolkit.IdWorker; import com.bofeng.dao.MsReportMapper; import com.bofeng.dao.MsSuspectedMapper; import com.bofeng.entity.MsReport; import com.bofeng.entity.MsSuspected; import com.yvan.platform.Conv; import io.swagger.models.auth.In; import org.joda.time.DateTime; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; /** * @Author: xielianghe * @Date: 2020/2/4 15:44 */ @Service @Transactional(readOnly = true) public class MsSuspectedService { @Autowired private MsSuspectedMapper msSuspectedMapper; @Autowired private MsReportMapper msReportMapper; //查询家人 @Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRED) public MsSuspected selectSuspected(long suspectedId) { return msSuspectedMapper.selectById(suspectedId); } //添加家人 @Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRED) public Long addSuspected(Long suspectedId, String userName, Integer grender, Integer age, String familyStatus, String statusDesp, Integer medical, BigDecimal temperature, Integer cough, Integer muscle, Integer dyspnea, Integer fatigue, Integer diarrhea, Integer singleRoom, String others, Long userCreate, Integer scoreRezult, Integer temperatureScore, Integer scoreHistroy, Integer score) { Long reportId = 0L; //如果是当前日期 已经添加 Date t = new Date(); SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd"); String reportDate = df.format(t); List listReport = msReportMapper.selectByReportDate(reportDate, userCreate); Long houseId = msReportMapper.selectHouseIdByUserId(userCreate); //首次进入。没有今日报告 if (listReport == null || listReport.size() == 0) { MsReport msReport = new MsReport(); msReport.setReportId(IdWorker.getId()); msReport.setHouseId(houseId); msReport.setSafetyNum(0); msReport.setSureNum(0); msReport.setSuspectedNum(0); msReport.setNormalNum(0); msReport.setSingleNum(0); msReport.setRemarks(""); msReport.setReportDate(DateTime.now().toDate()); msReport.setMsStatus(0); msReport.setUserCreate(userCreate); msReport.setTimeCreate(DateTime.now()); msReport.setUserUpdate(userCreate); msReport.setTimeUpdate(DateTime.now()); msReportMapper.insert(msReport); reportId = msReport.getReportId(); } else { reportId = listReport.get(0).getReportId(); } //判断是否疑似 Integer suspectedStatus = 0; //确诊 if (medical == 1) suspectedStatus = 1; //隔离 if (singleRoom == 1) suspectedStatus = 1; //体温 if (Conv.NFloat(temperature) < Conv.NFloat(35) || Conv.NFloat(temperature) > Conv.NFloat(37.3)) suspectedStatus = 1; //咳嗽 if (cough > 0) suspectedStatus = 1; //肌肉酸痛 if (muscle > 0) suspectedStatus = 1; //呼吸困难 if (dyspnea > 0) suspectedStatus = 1; //乏力 if (fatigue > 0) suspectedStatus = 1; //腹泻 if (diarrhea > 0) suspectedStatus = 1; if (suspectedId == 0L) { //判断家人是否同名 List list = msSuspectedMapper.selectUserNameNum(reportId, userName, reportDate); if (list != null && list.size() > 0) return 2L; //判断是否评估 if (scoreRezult == 0) { MsSuspected msSuspected1 = getScore(0L, userName, medical,temperature, cough, muscle, dyspnea, fatigue, diarrhea, userCreate); if (msSuspected1 != null) { scoreRezult = msSuspected1.getScoreRezult(); score = msSuspected1.getScore(); temperatureScore = msSuspected1.getTemperatureScore(); scoreHistroy = msSuspected1.getScoreHistroy(); } } MsSuspected msSuspected = new MsSuspected(); msSuspected.setSuspectedId(IdWorker.getId()); msSuspected.setReportId(reportId); msSuspected.setUserName(userName); msSuspected.setGrender(grender);//默认为家人 msSuspected.setAge(age); msSuspected.setFamilyStatus(familyStatus); msSuspected.setStatusDesp(statusDesp); msSuspected.setMedical(medical); msSuspected.setTemperature(temperature); msSuspected.setCough(cough); msSuspected.setMuscle(muscle); msSuspected.setDiarrhea(dyspnea); msSuspected.setFatigue(fatigue); msSuspected.setDiarrhea(diarrhea); msSuspected.setSingleRoom(singleRoom); msSuspected.setOthers(others); msSuspected.setSuspectedStatus(suspectedStatus); msSuspected.setScoreRezult(scoreRezult); msSuspected.setScore(score); msSuspected.setScoreHistroy(scoreHistroy); msSuspected.setTemperatureScore(temperatureScore); msSuspected.setUserCreate(userCreate); msSuspected.setTimeCreate(DateTime.now()); msSuspected.setUserUpdate(userCreate); msSuspected.setTimeUpdate(DateTime.now()); msSuspectedMapper.insert(msSuspected); } else { //判断家人是否同名 List list = msSuspectedMapper.selectUserNameNum(reportId, userName, reportDate); if (list != null && list.size() > 0) { if (list.size() > 1) return 2L; else { if (list.get(0).getSuspectedId().longValue() != suspectedId.longValue()) return 2L; } } MsSuspected msSuspected2 = getScore(suspectedId, userName, medical,temperature, cough, muscle, dyspnea, fatigue, diarrhea, userCreate); if (msSuspected2 != null) { scoreRezult = msSuspected2.getScoreRezult(); score = msSuspected2.getScore(); temperatureScore = msSuspected2.getTemperatureScore(); scoreHistroy = msSuspected2.getScoreHistroy(); } MsSuspected msSuspected1 = msSuspectedMapper.selectById(suspectedId); if (msSuspected1 != null) { msSuspected1.setUserName(userName); msSuspected1.setGrender(grender);//默认为家人 msSuspected1.setAge(age); msSuspected1.setFamilyStatus(familyStatus); msSuspected1.setStatusDesp(statusDesp); msSuspected1.setMedical(medical); msSuspected1.setTemperature(temperature); msSuspected1.setCough(cough); msSuspected1.setMuscle(muscle); msSuspected1.setDiarrhea(dyspnea); msSuspected1.setFatigue(fatigue); msSuspected1.setDiarrhea(diarrhea); msSuspected1.setSingleRoom(singleRoom); msSuspected1.setOthers(others); msSuspected1.setScoreRezult(scoreRezult); msSuspected1.setScore(score); msSuspected1.setScoreHistroy(scoreHistroy); msSuspected1.setTemperatureScore(temperatureScore); msSuspected1.setSuspectedStatus(suspectedStatus); msSuspectedMapper.updateById(msSuspected1); } } //更新今日日报 updateReport(reportId, medical, singleRoom, temperature); return reportId; } @Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRED) public Integer deleteSuspected(Long suspectedId) { MsSuspected msSuspected = msSuspectedMapper.selectById(suspectedId); if (msSuspected != null) { msSuspectedMapper.deleteById(suspectedId); //更新今日日报 updateReport(msSuspected.getReportId(), msSuspected.getMedical(), msSuspected.getSingleRoom(), msSuspected.getTemperature()); MsReport msReport = msReportMapper.selectById(msSuspected.getReportId()); if (msReport != null) return msReport.getSafetyNum(); } return 0; } //更新今日日报 @Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRED) public void updateReport(Long reportId, Integer medical, Integer singleRoom, BigDecimal temperature) { //更新今日日报 Integer trueNum = 0, singleNum = 0, isSuspected = 0, isNoSuspected = 0, isFamliy = 0; //确诊 trueNum = msReportMapper.selectSuspectedNum(reportId); //居家隔离 singleNum = msReportMapper.selectSingleRoomNum(reportId); //正常 isSuspected = msReportMapper.selectisSuspectedNum(reportId); //疑似 isNoSuspected = msReportMapper.selectisNoSuspectedNum(reportId); //今日居家 List list = msSuspectedMapper.selectByReportId(reportId); if (list != null && list.size() > 0) isFamliy = list.size(); MsReport msReport = msReportMapper.selectById(reportId); if (msReport != null) { msReport.setSureNum(trueNum); msReport.setSingleNum(singleNum); msReport.setSuspectedNum(isNoSuspected); msReport.setNormalNum(isSuspected); msReport.setSafetyNum(isFamliy); if (isNoSuspected > 0) msReport.setMsStatus(2); else msReport.setMsStatus(1); msReportMapper.updateById(msReport); } } //健康评估 @Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRED) public MsSuspected getScore(Long susprectedId, String userName, Integer medical, BigDecimal temperature, Integer cough, Integer muscle, Integer dyspnea, Integer fatigue, Integer diarrhea, Long userCreate) { MsSuspected msSuspected = new MsSuspected(); msSuspected.setTemperatureScore(getTemperatureScore(temperature)); msSuspected.setScore(addScore(medical, temperature, cough, muscle, dyspnea, fatigue, diarrhea)); Integer scoreHistroy = msSuspectedMapper.selectUserNameScore(userCreate, userName, susprectedId); msSuspected.setScoreHistroy(scoreHistroy); msSuspected.setScoreRezult(scoreRezulte(medical,msSuspected.getScoreHistroy(), msSuspected.getScore())); return msSuspected; } //获取温度评分 @Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRED) public Integer getTemperatureScore(BigDecimal temperature) { Integer score = 0; //温度 if (Conv.NFloat(temperature) < Conv.NFloat(37.3))//37.3以下0分 score += 0; if (Conv.NFloat(temperature) >= Conv.NFloat(37.4) && Conv.NFloat(temperature) <= Conv.NFloat(38))// 37.3~38℃为 1分 score += 1; if (Conv.NFloat(temperature) >= Conv.NFloat(38.1) && Conv.NFloat(temperature) <= Conv.NFloat(39))// 38.1~39℃为中度发热 2分 score += 2; if (Conv.NFloat(temperature) >= Conv.NFloat(39.1) && Conv.NFloat(temperature) <= Conv.NFloat(40))//39.1~40℃为高热 3分 score += 3; if (Conv.NFloat(temperature) > Conv.NFloat(40))//340℃以上为超高热 4分 score += 4; return score; } //获取总评分 @Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRED) public Integer addScore(Integer medical, BigDecimal temperature, Integer cough, Integer muscle, Integer dyspnea, Integer fatigue, Integer diarrhea) { Integer score = 0; if (medical == 0) { //温度 score += getTemperatureScore(temperature); //咳嗽 score += cough; //肌肉 score += muscle; //肌肉 score += dyspnea; //肌肉 score += fatigue; //肌肉 score += diarrhea; } else score = 5; return score; } //评估结果 @Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRED) public Integer scoreRezulte(Integer medical, Integer scoreHistory, Integer score) { Integer scoreRezult = 0; if (medical == 0) { //判断用户是否含有历史评分 if (scoreHistory == null) { //判断结果 if (score < 1) scoreRezult = 1; if (score >= 1 && score <= 3) scoreRezult = 2; if (score == 4) scoreRezult = 3; if (score > 4) scoreRezult = 4; } else { if (score - scoreHistory >= 3) return 4; else { if (score < 1) scoreRezult = 1; if (score >= 1 && score <= 3) scoreRezult = 2; if (score == 4) scoreRezult = 3; if (score > 4) scoreRezult = 4; } } } else scoreRezult = 4; return scoreRezult; } }