|
@@ -0,0 +1,242 @@
|
|
|
+package com.diagbot.facade;
|
|
|
+
|
|
|
+import com.alibaba.druid.support.json.JSONUtils;
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
|
+import com.diagbot.dto.KlCalculatorFormulaDTO;
|
|
|
+import com.diagbot.entity.KlCalculatorFormula;
|
|
|
+import com.diagbot.entity.KlCalculatorFormulaGroupDetail;
|
|
|
+import com.diagbot.entity.KlCalculatorFormulaGroupScore;
|
|
|
+import com.diagbot.entity.KlCalculatorFormulaParam;
|
|
|
+import com.diagbot.service.impl.KlCalculatorFormulaServiceImpl;
|
|
|
+import com.diagbot.util.BeanUtil;
|
|
|
+import com.diagbot.util.ListUtil;
|
|
|
+import com.diagbot.vo.KlCalculatorFormulaVO;
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
+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;
|
|
|
+import java.util.stream.Collectors;
|
|
|
+
|
|
|
+/**
|
|
|
+ * 量表计算公式
|
|
|
+ */
|
|
|
+@Component
|
|
|
+@Slf4j
|
|
|
+public class KlCalculatorFormulaFacade extends KlCalculatorFormulaServiceImpl {
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ KlCalculatorFormulaParamFacade klCalculatorFormulaParamFacade;
|
|
|
+ @Autowired
|
|
|
+ KlCalculatorFormulaGroupDetailFacade klCalculatorFormulaGroupDetailFacade;
|
|
|
+ @Autowired
|
|
|
+ KlCalculatorFormulaGroupScoreFacade klCalculatorFormulaGroupScoreFacade;
|
|
|
+
|
|
|
+ public void saveCalculatorFormulaAll(KlCalculatorFormulaVO klCalculatorFormulaVO) {
|
|
|
+
|
|
|
+// log.info("=====klCalculatorFormulaVO is :" + JSONUtils.toJSONString(klCalculatorFormulaVO));
|
|
|
+ //保存主表
|
|
|
+ LambdaQueryWrapper<KlCalculatorFormula> queryWrapper = Wrappers.<KlCalculatorFormula>lambdaQuery().eq(KlCalculatorFormula::getConceptId, klCalculatorFormulaVO.getConceptId());
|
|
|
+ this.remove(queryWrapper);
|
|
|
+ KlCalculatorFormula klCalculatorFormula = new KlCalculatorFormula();
|
|
|
+ BeanUtil.copyProperties(klCalculatorFormulaVO, klCalculatorFormula);
|
|
|
+
|
|
|
+ this.save(klCalculatorFormula);
|
|
|
+ //保存参数表
|
|
|
+ LambdaQueryWrapper<KlCalculatorFormulaParam> paramQueryWrapper = Wrappers.<KlCalculatorFormulaParam>lambdaQuery().eq(KlCalculatorFormulaParam::getConceptId, klCalculatorFormulaVO.getConceptId());
|
|
|
+ klCalculatorFormulaParamFacade.remove(paramQueryWrapper);
|
|
|
+ List<KlCalculatorFormulaVO.ContentTableData> contentTableData = klCalculatorFormulaVO.getContentTableData();
|
|
|
+ for (KlCalculatorFormulaVO.ContentTableData contentTableDatum : contentTableData) {
|
|
|
+ KlCalculatorFormulaParam klCalculatorFormulaParam = new KlCalculatorFormulaParam();
|
|
|
+ BeanUtil.copyProperties(contentTableDatum, klCalculatorFormulaParam);
|
|
|
+ klCalculatorFormulaParam.setFormulaId(klCalculatorFormula.getId());
|
|
|
+ klCalculatorFormulaParam.setConceptId(klCalculatorFormulaVO.getConceptId());
|
|
|
+ klCalculatorFormulaParam.setModifier(klCalculatorFormulaVO.getModifier());
|
|
|
+ klCalculatorFormulaParamFacade.save(klCalculatorFormulaParam);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ //保存公式表
|
|
|
+ LambdaQueryWrapper<KlCalculatorFormulaGroupDetail> groupDetailQueryWrapper = Wrappers.<KlCalculatorFormulaGroupDetail>lambdaQuery().eq(KlCalculatorFormulaGroupDetail::getConceptId, klCalculatorFormulaVO.getConceptId());
|
|
|
+ klCalculatorFormulaGroupDetailFacade.remove(groupDetailQueryWrapper);
|
|
|
+ List<KlCalculatorFormulaVO.ScoreTableData> scoreTableData = klCalculatorFormulaVO.getScoreTableData();
|
|
|
+ Map<String,List<KlCalculatorFormulaVO.ScoreRange>> scoreRangeMap = new HashMap<>();
|
|
|
+ for (KlCalculatorFormulaVO.ScoreTableData scoreTableDatum : scoreTableData) {
|
|
|
+ KlCalculatorFormulaGroupDetail klCalculatorFormulaGroupDetail = new KlCalculatorFormulaGroupDetail();
|
|
|
+
|
|
|
+ klCalculatorFormulaGroupDetail.setModifier(klCalculatorFormulaVO.getModifier());
|
|
|
+ klCalculatorFormulaGroupDetail.setConceptId(klCalculatorFormulaVO.getConceptId());
|
|
|
+ klCalculatorFormulaGroupDetail.setFormulaId(klCalculatorFormula.getId());
|
|
|
+ klCalculatorFormulaGroupDetail.setFormula(scoreTableDatum.getFormula());
|
|
|
+
|
|
|
+ klCalculatorFormulaGroupDetail.setGroupId(scoreTableDatum.getGroupId());
|
|
|
+ klCalculatorFormulaGroupDetail.setConditionId(scoreTableDatum.getConditionId());
|
|
|
+ klCalculatorFormulaGroupDetail.setConditionName(scoreTableDatum.getConditionName());
|
|
|
+ klCalculatorFormulaGroupDetail.setConditionType(scoreTableDatum.getConditionType());
|
|
|
+ klCalculatorFormulaGroupDetail.setTextType(scoreTableDatum.getConditionContent().getTextType());
|
|
|
+ klCalculatorFormulaGroupDetail.setMaxValueName(scoreTableDatum.getConditionContent().getValueType().getMaxValueName());
|
|
|
+ klCalculatorFormulaGroupDetail.setMaxValue(scoreTableDatum.getConditionContent().getValueType().getMaxValue());
|
|
|
+ klCalculatorFormulaGroupDetail.setMaxValueUnit(scoreTableDatum.getConditionContent().getValueType().getMaxValueUnit());
|
|
|
+ klCalculatorFormulaGroupDetail.setMinValueName(scoreTableDatum.getConditionContent().getValueType().getMinValueName());
|
|
|
+ klCalculatorFormulaGroupDetail.setMinValue(scoreTableDatum.getConditionContent().getValueType().getMinValue());
|
|
|
+ klCalculatorFormulaGroupDetail.setMinValueUnit(scoreTableDatum.getConditionContent().getValueType().getMinValueUnit());
|
|
|
+
|
|
|
+ String key = klCalculatorFormulaVO.getConceptId() + "_" + klCalculatorFormula.getId() + "_" + scoreTableDatum.getGroupId();
|
|
|
+ scoreRangeMap.put(key,scoreTableDatum.getScoreRange());
|
|
|
+// klCalculatorFormulaGroupDetail.setGreaterEqual(scoreTableDatum.getScoreRange().getGreaterEqual());
|
|
|
+// klCalculatorFormulaGroupDetail.setLessEqual(scoreTableDatum.getScoreRange().getLessEqual());
|
|
|
+// klCalculatorFormulaGroupDetail.setResult(scoreTableDatum.getResult());
|
|
|
+
|
|
|
+ klCalculatorFormulaGroupDetailFacade.save(klCalculatorFormulaGroupDetail);
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ //保存得分结果表
|
|
|
+ if (!scoreRangeMap.isEmpty()) {
|
|
|
+ LambdaQueryWrapper<KlCalculatorFormulaGroupScore> groupScoreQueryWrapper = Wrappers.<KlCalculatorFormulaGroupScore>lambdaQuery().eq(KlCalculatorFormulaGroupScore::getConceptId, klCalculatorFormulaVO.getConceptId());
|
|
|
+ klCalculatorFormulaGroupScoreFacade.remove(groupScoreQueryWrapper);
|
|
|
+ for (Map.Entry<String, List<KlCalculatorFormulaVO.ScoreRange>> entry : scoreRangeMap.entrySet()) {
|
|
|
+ String key = entry.getKey();
|
|
|
+ List<KlCalculatorFormulaVO.ScoreRange> scoreRanges = entry.getValue();
|
|
|
+ String[] keys = key.split("_");
|
|
|
+ Long conceptId = Long.valueOf(keys[0]);
|
|
|
+ Long formulaId =Long.valueOf(keys[1]);
|
|
|
+ Long groupId = Long.valueOf(keys[2]);
|
|
|
+ for (KlCalculatorFormulaVO.ScoreRange scoreRange : scoreRanges) {
|
|
|
+ KlCalculatorFormulaGroupScore klCalculatorFormulaGroupScore = new KlCalculatorFormulaGroupScore();
|
|
|
+ klCalculatorFormulaGroupScore.setModifier(klCalculatorFormulaVO.getModifier());
|
|
|
+ klCalculatorFormulaGroupScore.setConceptId(conceptId);
|
|
|
+ klCalculatorFormulaGroupScore.setFormulaId(formulaId);
|
|
|
+ klCalculatorFormulaGroupScore.setGroupId(groupId);
|
|
|
+ klCalculatorFormulaGroupScore.setGreaterEqual(scoreRange.getGreaterEqual());
|
|
|
+ klCalculatorFormulaGroupScore.setLessEqual(scoreRange.getLessEqual());
|
|
|
+ klCalculatorFormulaGroupScore.setResult(scoreRange.getResult());
|
|
|
+ klCalculatorFormulaGroupScoreFacade.save(klCalculatorFormulaGroupScore);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public KlCalculatorFormulaDTO getCalculatorFormulaById(Long conceptId) {
|
|
|
+
|
|
|
+ KlCalculatorFormulaDTO klCalculatorFormulaDTO = new KlCalculatorFormulaDTO();
|
|
|
+
|
|
|
+ LambdaQueryWrapper<KlCalculatorFormula> queryWrapper = Wrappers.<KlCalculatorFormula>lambdaQuery().eq(KlCalculatorFormula::getConceptId, conceptId);
|
|
|
+ KlCalculatorFormula calculatorFormula = this.getOne(queryWrapper);
|
|
|
+ if (calculatorFormula == null) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ klCalculatorFormulaDTO.setTitle(calculatorFormula.getTitle());
|
|
|
+ klCalculatorFormulaDTO.setConceptId(calculatorFormula.getConceptId());
|
|
|
+ klCalculatorFormulaDTO.setNotes(calculatorFormula.getNotes());
|
|
|
+
|
|
|
+
|
|
|
+ LambdaQueryWrapper<KlCalculatorFormulaParam> paramQueryWrapper = Wrappers.<KlCalculatorFormulaParam>lambdaQuery().eq(KlCalculatorFormulaParam::getFormulaId, calculatorFormula.getId());
|
|
|
+ List<KlCalculatorFormulaParam> formulaParamList = klCalculatorFormulaParamFacade.list(paramQueryWrapper);
|
|
|
+ if (ListUtil.isNotEmpty(formulaParamList)) {
|
|
|
+ List<KlCalculatorFormulaDTO.ContentTableData> contentTableDataList = new ArrayList<>();
|
|
|
+ for (KlCalculatorFormulaParam klCalculatorFormulaParam : formulaParamList) {
|
|
|
+ KlCalculatorFormulaDTO.ContentTableData contentTableData = new KlCalculatorFormulaDTO.ContentTableData();
|
|
|
+ contentTableData.setName(klCalculatorFormulaParam.getName());
|
|
|
+ contentTableData.setUnit(klCalculatorFormulaParam.getUnit());
|
|
|
+ contentTableDataList.add(contentTableData);
|
|
|
+ }
|
|
|
+ klCalculatorFormulaDTO.setContentTableData(contentTableDataList);
|
|
|
+ }
|
|
|
+
|
|
|
+ LambdaQueryWrapper<KlCalculatorFormulaGroupScore> scoreLambdaQueryWrapper
|
|
|
+ = Wrappers.<KlCalculatorFormulaGroupScore>lambdaQuery()
|
|
|
+ .eq(KlCalculatorFormulaGroupScore::getFormulaId, calculatorFormula.getId());
|
|
|
+ List<KlCalculatorFormulaGroupScore> formulaGroupScoreList = klCalculatorFormulaGroupScoreFacade.list(scoreLambdaQueryWrapper);
|
|
|
+ Map<Long, List<KlCalculatorFormulaGroupScore>> groupIdScoreMap = new HashMap<>();
|
|
|
+ if (ListUtil.isNotEmpty(formulaGroupScoreList)) {
|
|
|
+ groupIdScoreMap = formulaGroupScoreList.stream().collect(Collectors.groupingBy(KlCalculatorFormulaGroupScore::getGroupId));
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ LambdaQueryWrapper<KlCalculatorFormulaGroupDetail> detailLambdaQueryWrapper
|
|
|
+ = Wrappers.<KlCalculatorFormulaGroupDetail>lambdaQuery()
|
|
|
+ .eq(KlCalculatorFormulaGroupDetail::getFormulaId, calculatorFormula.getId())
|
|
|
+ .orderByAsc(KlCalculatorFormulaGroupDetail::getGroupId).orderByAsc(KlCalculatorFormulaGroupDetail::getConditionId);
|
|
|
+ List<KlCalculatorFormulaGroupDetail> formulaGroupDetailList = klCalculatorFormulaGroupDetailFacade.list(detailLambdaQueryWrapper);
|
|
|
+ if (ListUtil.isNotEmpty(formulaGroupDetailList)) {
|
|
|
+ List<KlCalculatorFormulaDTO.ScoreTableData> scoreTableDataList = new ArrayList<>();
|
|
|
+ for (KlCalculatorFormulaGroupDetail klCalculatorFormulaGroupDetail : formulaGroupDetailList) {
|
|
|
+ KlCalculatorFormulaDTO.ScoreTableData scoreTableData = new KlCalculatorFormulaDTO.ScoreTableData();
|
|
|
+ scoreTableData.setGroupId(klCalculatorFormulaGroupDetail.getGroupId());
|
|
|
+ scoreTableData.setConditionId(klCalculatorFormulaGroupDetail.getConditionId());
|
|
|
+ scoreTableData.setConditionName(klCalculatorFormulaGroupDetail.getConditionName());
|
|
|
+ scoreTableData.setFormula(klCalculatorFormulaGroupDetail.getFormula());
|
|
|
+// scoreTableData.setResult(klCalculatorFormulaGroupDetail.getResult());
|
|
|
+ scoreTableData.setConditionType(klCalculatorFormulaGroupDetail.getConditionType());
|
|
|
+
|
|
|
+ KlCalculatorFormulaDTO.ConditionContent conditionContent = new KlCalculatorFormulaDTO.ConditionContent();
|
|
|
+ conditionContent.setTextType(klCalculatorFormulaGroupDetail.getTextType());
|
|
|
+
|
|
|
+ KlCalculatorFormulaDTO.ValueType valueType = new KlCalculatorFormulaDTO.ValueType();
|
|
|
+ valueType.setMaxValueName(klCalculatorFormulaGroupDetail.getMaxValueName());
|
|
|
+ valueType.setMaxValue(klCalculatorFormulaGroupDetail.getMaxValue());
|
|
|
+ valueType.setMaxValueUnit(klCalculatorFormulaGroupDetail.getMaxValueUnit());
|
|
|
+ valueType.setMinValueName(klCalculatorFormulaGroupDetail.getMinValueName());
|
|
|
+ valueType.setMinValue(klCalculatorFormulaGroupDetail.getMinValue());
|
|
|
+ valueType.setMinValueUnit(klCalculatorFormulaGroupDetail.getMinValueUnit());
|
|
|
+ conditionContent.setValueType(valueType);
|
|
|
+ scoreTableData.setConditionContent(conditionContent);
|
|
|
+
|
|
|
+ List<KlCalculatorFormulaGroupScore> klCalculatorFormulaGroupScores = groupIdScoreMap.get(scoreTableData.getGroupId());
|
|
|
+ if (ListUtil.isNotEmpty(klCalculatorFormulaGroupScores)) {
|
|
|
+ List<KlCalculatorFormulaDTO.ScoreRange> scoreRangeList = new ArrayList<>();
|
|
|
+ for (KlCalculatorFormulaGroupScore klCalculatorFormulaGroupScore : klCalculatorFormulaGroupScores) {
|
|
|
+ KlCalculatorFormulaDTO.ScoreRange scoreRange = new KlCalculatorFormulaDTO.ScoreRange();
|
|
|
+ scoreRange.setGreaterEqual(klCalculatorFormulaGroupScore.getGreaterEqual());
|
|
|
+ scoreRange.setLessEqual(klCalculatorFormulaGroupScore.getLessEqual());
|
|
|
+ scoreRange.setResult(klCalculatorFormulaGroupScore.getResult());
|
|
|
+ scoreRangeList.add(scoreRange);
|
|
|
+ }
|
|
|
+ scoreTableData.setScoreRange(scoreRangeList);
|
|
|
+ }
|
|
|
+
|
|
|
+ scoreTableDataList.add(scoreTableData);
|
|
|
+ }
|
|
|
+
|
|
|
+ klCalculatorFormulaDTO.setScoreTableData(scoreTableDataList);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ return klCalculatorFormulaDTO;
|
|
|
+ }
|
|
|
+
|
|
|
+ public KlCalculatorFormulaDTO getCalculatorFormulaStaticInfo(Long conceptId) {
|
|
|
+
|
|
|
+ KlCalculatorFormulaDTO klCalculatorFormulaDTO = new KlCalculatorFormulaDTO();
|
|
|
+
|
|
|
+ LambdaQueryWrapper<KlCalculatorFormula> queryWrapper = Wrappers.<KlCalculatorFormula>lambdaQuery().eq(KlCalculatorFormula::getConceptId, conceptId);
|
|
|
+ KlCalculatorFormula calculatorFormula = this.getOne(queryWrapper);
|
|
|
+ if (calculatorFormula == null) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ klCalculatorFormulaDTO.setTitle(calculatorFormula.getTitle());
|
|
|
+ klCalculatorFormulaDTO.setConceptId(calculatorFormula.getConceptId());
|
|
|
+ klCalculatorFormulaDTO.setNotes(calculatorFormula.getNotes());
|
|
|
+
|
|
|
+
|
|
|
+ LambdaQueryWrapper<KlCalculatorFormulaParam> paramQueryWrapper = Wrappers.<KlCalculatorFormulaParam>lambdaQuery().eq(KlCalculatorFormulaParam::getFormulaId, calculatorFormula.getId());
|
|
|
+ List<KlCalculatorFormulaParam> formulaParamList = klCalculatorFormulaParamFacade.list(paramQueryWrapper);
|
|
|
+ if (ListUtil.isNotEmpty(formulaParamList)) {
|
|
|
+ List<KlCalculatorFormulaDTO.ContentTableData> contentTableDataList = new ArrayList<>();
|
|
|
+ for (KlCalculatorFormulaParam klCalculatorFormulaParam : formulaParamList) {
|
|
|
+ KlCalculatorFormulaDTO.ContentTableData contentTableData = new KlCalculatorFormulaDTO.ContentTableData();
|
|
|
+ contentTableData.setName(klCalculatorFormulaParam.getName());
|
|
|
+ contentTableData.setUnit(klCalculatorFormulaParam.getUnit());
|
|
|
+ contentTableDataList.add(contentTableData);
|
|
|
+ }
|
|
|
+ klCalculatorFormulaDTO.setContentTableData(contentTableDataList);
|
|
|
+ }
|
|
|
+
|
|
|
+ return klCalculatorFormulaDTO;
|
|
|
+ }
|
|
|
+}
|