KlDiagnoseFacade.java 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277
  1. package com.diagbot.facade;
  2. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  3. import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
  4. import com.baomidou.mybatisplus.core.metadata.IPage;
  5. import com.diagbot.dto.DiagnosesFindDTO;
  6. import com.diagbot.dto.KlDiagnoseByIdDTO;
  7. import com.diagbot.dto.KlDiagnoseGroupDTO;
  8. import com.diagbot.dto.KlDiagnoseInfoDTO;
  9. import com.diagbot.dto.KlDiagnoseTypeDTO;
  10. import com.diagbot.entity.KlDiagnose;
  11. import com.diagbot.entity.KlDiagnoseBase;
  12. import com.diagbot.entity.KlDiagnoseCondition;
  13. import com.diagbot.enums.IsDeleteEnum;
  14. import com.diagbot.exception.CommonErrorCode;
  15. import com.diagbot.exception.CommonException;
  16. import com.diagbot.service.impl.KlDiagnoseServiceImpl;
  17. import com.diagbot.util.DateUtil;
  18. import com.diagbot.util.ListUtil;
  19. import com.diagbot.util.StringUtil;
  20. import com.diagbot.vo.DiagnosesFindVO;
  21. import com.diagbot.vo.KlDiagnoseByIdVO;
  22. import com.diagbot.vo.KlDiagnoseClearVO;
  23. import com.diagbot.vo.KlDiagnoseDetailVO;
  24. import com.diagbot.vo.KlDiagnoseGroupVO;
  25. import com.diagbot.vo.KlDiagnoseInfoVO;
  26. import com.diagbot.vo.KlDiagnoseSatarDisVO;
  27. import com.diagbot.vo.KlDiagnoseSaveVO;
  28. import com.diagbot.vo.KlDiagnoseTypeVO;
  29. import org.springframework.beans.factory.annotation.Autowired;
  30. import org.springframework.stereotype.Component;
  31. import java.util.ArrayList;
  32. import java.util.Date;
  33. import java.util.List;
  34. import java.util.Map;
  35. import java.util.stream.Collectors;
  36. /**
  37. * @Description:
  38. * @author: gaodm
  39. * @time: 2021/3/15 11:42
  40. */
  41. @Component
  42. public class KlDiagnoseFacade extends KlDiagnoseServiceImpl {
  43. @Autowired
  44. KlDiagnoseConditionFacade klDiagnoseConditionFacade;
  45. @Autowired
  46. KlDiagnoseBaseFacade klDiagnoseBaseFacade;
  47. @Autowired
  48. KlDictionaryInfoFacade klDictionaryInfoFacade;
  49. public IPage<KlDiagnoseInfoDTO> getKlDiagnoseInfoPage(KlDiagnoseInfoVO klDiagnoseInfoVO) {
  50. return this.getKlDiagnosePages(klDiagnoseInfoVO);
  51. }
  52. public List<KlDiagnoseTypeDTO> getByIdDiagnoseAll(KlDiagnoseByIdVO klDiagnoseByIdVO) {
  53. List<KlDiagnoseByIdDTO> byIdDiagnoses = this.getByIdDiagnoses(klDiagnoseByIdVO);
  54. //基础条件
  55. Map<Integer, List<KlDiagnoseByIdDTO>> baseGroupMap = byIdDiagnoses.stream().filter(i -> i.getConditionType().equals(1)).collect(Collectors.groupingBy(KlDiagnoseByIdDTO::getBaseGroup));
  56. //根据ConditionType 和 getConditionGroup两个添加分组
  57. Map<Integer, Map<Integer, List<KlDiagnoseByIdDTO>>> collect = byIdDiagnoses.stream().filter(i -> !i.getConditionType().equals(1)).collect(Collectors.groupingBy(KlDiagnoseByIdDTO::getConditionGroup, Collectors.groupingBy(KlDiagnoseByIdDTO::getConditionType)));
  58. List<KlDiagnoseTypeDTO> klDiagnoseTypeList = new ArrayList<>();
  59. for (Map.Entry<Integer, Map<Integer, List<KlDiagnoseByIdDTO>>> entry : collect.entrySet()) {
  60. KlDiagnoseTypeDTO klDiagnoseTypeDTO = new KlDiagnoseTypeDTO();
  61. klDiagnoseTypeDTO.setConditionGroup(entry.getKey());
  62. Map<Integer, List<KlDiagnoseByIdDTO>> value = entry.getValue();
  63. List<KlDiagnoseGroupDTO> byIdDTO = new ArrayList<>();
  64. for (Map.Entry<Integer, List<KlDiagnoseByIdDTO>> entry2 : value.entrySet()) {
  65. klDiagnoseTypeDTO.setConditionType(entry2.getKey());
  66. List<KlDiagnoseByIdDTO> value1 = entry2.getValue();
  67. for (KlDiagnoseByIdDTO data : value1) {
  68. KlDiagnoseGroupDTO klDiagnoseGroupDTO = new KlDiagnoseGroupDTO();
  69. // klDiagnoseGroupDTO.setConditionGroup(entry2.getKey());
  70. klDiagnoseGroupDTO.setFitNo(data.getFitNo());
  71. klDiagnoseGroupDTO.setBaseGroup(data.getBaseGroup());
  72. klDiagnoseGroupDTO.setKlDiagnoseByIdDTO(baseGroupMap.get(data.getBaseGroup()));
  73. byIdDTO.add(klDiagnoseGroupDTO);
  74. }
  75. klDiagnoseTypeDTO.setByIdDTO(byIdDTO);
  76. }
  77. klDiagnoseTypeList.add(klDiagnoseTypeDTO);
  78. }
  79. return klDiagnoseTypeList;
  80. }
  81. public Boolean clearDiagnoseAll(KlDiagnoseClearVO klDiagnoseClearVO) {
  82. boolean res = false;
  83. res = clearDiagnoseSub(klDiagnoseClearVO.getId());
  84. //最后删除主表rule
  85. res = this.removeById(klDiagnoseClearVO.getId());
  86. return res;
  87. }
  88. private boolean clearDiagnoseSub(Long id) {
  89. boolean res = false;
  90. QueryWrapper<KlDiagnoseCondition> klDiagnoseConditionQuery = new QueryWrapper<>();
  91. klDiagnoseConditionQuery.eq("is_deleted", IsDeleteEnum.N.getKey()).eq("diagnose_id", id);
  92. List<KlDiagnoseCondition> diagnoseConditionList = klDiagnoseConditionFacade.list(klDiagnoseConditionQuery);
  93. List<Long> baseId = new ArrayList<>();
  94. if (ListUtil.isNotEmpty(diagnoseConditionList)) {
  95. for (KlDiagnoseCondition data : diagnoseConditionList) {
  96. if (null != data.getDiagnoseBaseId() & 0 != data.getDiagnoseBaseId()) {
  97. baseId.add(data.getDiagnoseBaseId());
  98. }
  99. }
  100. }
  101. if (ListUtil.isNotEmpty(baseId)) {
  102. //删除kl_diagnose_base表数据
  103. res = klDiagnoseBaseFacade.removeByIds(baseId);
  104. }
  105. //删除kl_diagnose_condition表的数据
  106. res = klDiagnoseConditionFacade.remove(klDiagnoseConditionQuery);
  107. return res;
  108. }
  109. public Boolean disableDiagnose(KlDiagnoseSatarDisVO klDiagnoseSatarDisVO, int start) {
  110. boolean res = false;
  111. Date now = DateUtil.now();
  112. int sum = this.count(new QueryWrapper<KlDiagnose>().eq("is_deleted", IsDeleteEnum.N.getKey())
  113. .eq("id", klDiagnoseSatarDisVO.getId()));
  114. if (sum == 0) {
  115. throw new CommonException(CommonErrorCode.SERVER_IS_ERROR, "该数据已不存在!");
  116. }
  117. UpdateWrapper<KlDiagnose> klKlDiagnoseUpdate = new UpdateWrapper<>();
  118. klKlDiagnoseUpdate.eq("is_deleted", IsDeleteEnum.N.getKey())
  119. .eq("id", klDiagnoseSatarDisVO.getId())
  120. .set("status", start)
  121. .set("modifier", klDiagnoseSatarDisVO.getModifier())
  122. .set("gmt_modified", now);
  123. return this.update(new KlDiagnose(), klKlDiagnoseUpdate);
  124. }
  125. public Boolean saveDiagnoseAll(KlDiagnoseSaveVO klDiagnoseSaveVO) {
  126. Date now = DateUtil.now();
  127. boolean res = false;
  128. // 校验名称是否相同
  129. int count = this.count(new QueryWrapper<KlDiagnose>()
  130. .eq("is_deleted", IsDeleteEnum.N.getKey())
  131. .eq("concept_id", klDiagnoseSaveVO.getConceptId())
  132. .ne("id", klDiagnoseSaveVO.getId() == null ? -1 : klDiagnoseSaveVO.getId()));
  133. if (count > 0) {
  134. throw new CommonException(CommonErrorCode.SERVER_IS_ERROR, "该诊断依据已存在!");
  135. }
  136. //校验数据是否还在
  137. if (null != klDiagnoseSaveVO.getId()) {
  138. int sum = this.count(new QueryWrapper<KlDiagnose>().eq("is_deleted", IsDeleteEnum.N.getKey())
  139. .eq("id", klDiagnoseSaveVO.getId()));
  140. if (sum == 0) {
  141. throw new CommonException(CommonErrorCode.SERVER_IS_ERROR, "该数据已不存在!");
  142. }
  143. UpdateWrapper<KlDiagnose> klDiagnoseUpdate = new UpdateWrapper<>();
  144. klDiagnoseUpdate.eq("is_deleted", IsDeleteEnum.N.getKey())
  145. .eq("id", klDiagnoseSaveVO.getId())
  146. .set(StringUtil.isNotBlank(klDiagnoseSaveVO.getDescription()), "description", klDiagnoseSaveVO.getDescription())
  147. .set(StringUtil.isNotBlank(klDiagnoseSaveVO.getConceptId().toString()), "concept_id", klDiagnoseSaveVO.getConceptId())
  148. .set("modifier", klDiagnoseSaveVO.getModifier())
  149. .set("gmt_modified", now);
  150. res = this.update(klDiagnoseUpdate);
  151. //先删除原有的详情;
  152. res = clearDetail(klDiagnoseSaveVO.getId());
  153. if (ListUtil.isNotEmpty(klDiagnoseSaveVO.getKlDiagnoseTypeVO())) {
  154. //再重新传入的详情保存
  155. res = saveCommon(klDiagnoseSaveVO);
  156. }
  157. } else {
  158. //先保存主表rule
  159. KlDiagnose klDiagnose = new KlDiagnose();
  160. klDiagnose.setConceptId(klDiagnoseSaveVO.getConceptId());
  161. klDiagnose.setDescription(klDiagnoseSaveVO.getDescription());
  162. klDiagnose.setStatus(1);
  163. klDiagnose.setModifier(klDiagnoseSaveVO.getModifier());
  164. klDiagnose.setCreator(klDiagnoseSaveVO.getModifier());
  165. klDiagnose.setGmtCreate(now);
  166. klDiagnose.setGmtModified(now);
  167. res = this.save(klDiagnose);
  168. if (res) {
  169. //再保存附表
  170. klDiagnoseSaveVO.setId(klDiagnose.getId());
  171. res = saveCommon(klDiagnoseSaveVO);
  172. }
  173. }
  174. return res;
  175. }
  176. public boolean clearDetail(Long id) {
  177. boolean res = false;
  178. QueryWrapper<KlDiagnoseCondition> klDiagnoseQuery = new QueryWrapper<>();
  179. klDiagnoseQuery.eq("is_deleted", IsDeleteEnum.N.getKey()).eq("diagnose_id", id);
  180. List<KlDiagnoseCondition> diaConditionList = klDiagnoseConditionFacade.list(klDiagnoseQuery);
  181. List<Long> baseId = new ArrayList<>();
  182. if (ListUtil.isNotEmpty(diaConditionList)) {
  183. for (KlDiagnoseCondition data : diaConditionList) {
  184. if (null != data.getDiagnoseBaseId() && 0 != data.getDiagnoseBaseId()) {
  185. baseId.add(data.getDiagnoseBaseId());
  186. }
  187. }
  188. }
  189. if (ListUtil.isNotEmpty(baseId)) {
  190. QueryWrapper<KlDiagnoseBase> klDiagnoseBaseQuery = new QueryWrapper<>();
  191. klDiagnoseBaseQuery.eq("is_deleted", IsDeleteEnum.N.getKey()).in("id", baseId);
  192. //删除kl_rule_base表数据
  193. res = klDiagnoseBaseFacade.remove(klDiagnoseBaseQuery);
  194. }
  195. //删除kl_rule_condition表的数据
  196. res = klDiagnoseConditionFacade.remove(klDiagnoseQuery);
  197. return res;
  198. }
  199. public Boolean saveCommon(KlDiagnoseSaveVO klDiagnoseSaveVO) {
  200. Date now = DateUtil.now();
  201. boolean res = false;
  202. int sum = 99;
  203. int baseGroup = 9;
  204. List<KlDiagnoseTypeVO> klDiagnoseTypeVO = klDiagnoseSaveVO.getKlDiagnoseTypeVO();
  205. for (KlDiagnoseTypeVO data : klDiagnoseTypeVO) {
  206. KlDiagnoseCondition klDiagnoseCondition = new KlDiagnoseCondition();
  207. klDiagnoseCondition.setConditionType(data.getConditionType());//取出诊断的类型,2拟诊,3 确诊
  208. sum = sum + 1;
  209. klDiagnoseCondition.setConditionGroup(sum);
  210. List<KlDiagnoseGroupVO> groupVO = data.getGroupVO();
  211. for (KlDiagnoseGroupVO data2 : groupVO) {
  212. baseGroup = baseGroup + 1;
  213. klDiagnoseCondition.setDiagnoseId(klDiagnoseSaveVO.getId());
  214. klDiagnoseCondition.setBaseGroup(baseGroup);//
  215. klDiagnoseCondition.setFitNo(data2.getFitNo());
  216. klDiagnoseConditionFacade.save(klDiagnoseCondition);
  217. //明细
  218. List<KlDiagnoseDetailVO> klDiagnoseDetail = data2.getKlDiagnoseDetail();
  219. for (KlDiagnoseDetailVO detailVO : klDiagnoseDetail) {
  220. KlDiagnoseBase klDiagnoseBase = new KlDiagnoseBase();
  221. klDiagnoseBase.setGmtModified(now);
  222. klDiagnoseBase.setConceptId(detailVO.getBasConceptId());
  223. klDiagnoseBase.setType(detailVO.getBasType());
  224. klDiagnoseBase.setDescription(detailVO.getBasDescription());
  225. klDiagnoseBase.setMaxOperator(detailVO.getMaxOperator());
  226. klDiagnoseBase.setMaxValue(detailVO.getMaxVal());
  227. klDiagnoseBase.setMaxUnit(detailVO.getMaxUnit());
  228. klDiagnoseBase.setMinOperator(detailVO.getMinOperator());
  229. klDiagnoseBase.setMinValue(detailVO.getMinVal());
  230. klDiagnoseBase.setMinUnit(detailVO.getMinUnit());
  231. klDiagnoseBase.setStatus(1);
  232. klDiagnoseBase.setEqValue(detailVO.getEqValue());
  233. klDiagnoseBase.setEqOperator(detailVO.getEqOperator());
  234. klDiagnoseBase.setEqUnit(detailVO.getEqUnit());
  235. res = klDiagnoseBaseFacade.save(klDiagnoseBase);
  236. if (res) {
  237. KlDiagnoseCondition klDiagnoseConditionBase = new KlDiagnoseCondition();
  238. klDiagnoseConditionBase.setDiagnoseBaseId(klDiagnoseBase.getId());
  239. klDiagnoseConditionBase.setBaseGroup(baseGroup);
  240. klDiagnoseConditionBase.setConditionType(1);
  241. klDiagnoseConditionBase.setDiagnoseId(klDiagnoseSaveVO.getId());
  242. res = klDiagnoseConditionFacade.save(klDiagnoseConditionBase);
  243. }
  244. }
  245. }
  246. }
  247. return res;
  248. }
  249. public List<DiagnosesFindDTO> findDiaNameAlls(DiagnosesFindVO diagnosesFindVO) {
  250. return this.findDiaNameAll(diagnosesFindVO);
  251. }
  252. }