LisMappingFacade.java 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322
  1. package com.diagbot.facade;
  2. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  3. import com.baomidou.mybatisplus.core.metadata.IPage;
  4. import com.diagbot.client.ICSSManServiceClient;
  5. import com.diagbot.client.UserServiceClient;
  6. import com.diagbot.dto.LisMappingPageDTO;
  7. import com.diagbot.dto.RespDTO;
  8. import com.diagbot.entity.Concept;
  9. import com.diagbot.entity.LisMapping;
  10. import com.diagbot.entity.QuestionInfo;
  11. import com.diagbot.entity.wrapper.LisMappingWrapper;
  12. import com.diagbot.enums.IsDeleteEnum;
  13. import com.diagbot.enums.LexiconTypeEnum;
  14. import com.diagbot.exception.CommonErrorCode;
  15. import com.diagbot.exception.CommonException;
  16. import com.diagbot.service.impl.LisMappingServiceImpl;
  17. import com.diagbot.util.DateUtil;
  18. import com.diagbot.util.ListUtil;
  19. import com.diagbot.util.RespDTOUtil;
  20. import com.diagbot.util.StringUtil;
  21. import com.diagbot.util.UserUtils;
  22. import com.diagbot.vo.GetUniqueNameVO;
  23. import com.diagbot.vo.IdListVO;
  24. import com.diagbot.vo.IdVO;
  25. import com.diagbot.vo.KLQuestionVO;
  26. import com.diagbot.vo.LisMappingPageVO;
  27. import com.diagbot.vo.LisMappingSearch;
  28. import com.diagbot.vo.LisMappingVO;
  29. import com.google.common.collect.Lists;
  30. import org.springframework.beans.factory.annotation.Autowired;
  31. import org.springframework.stereotype.Component;
  32. import java.util.Date;
  33. import java.util.HashMap;
  34. import java.util.List;
  35. import java.util.Map;
  36. import java.util.Set;
  37. import java.util.stream.Collectors;
  38. /**
  39. * @Description:
  40. * @Author:zhaops
  41. * @time: 2019/9/19 11:42
  42. */
  43. @Component
  44. public class LisMappingFacade extends LisMappingServiceImpl {
  45. @Autowired
  46. private ConceptFacade conceptFacade;
  47. @Autowired
  48. private UserServiceClient userServiceClient;
  49. @Autowired
  50. private ICSSManServiceClient icssManServiceClient;
  51. /**
  52. * 化验公表映射分页信息
  53. *
  54. * @param lisMappingPageVO
  55. * @return
  56. */
  57. public IPage<LisMappingPageDTO> getLisMappingPage(LisMappingPageVO lisMappingPageVO) {
  58. IPage<LisMappingPageDTO> dtoPage = this.lisMappingPage(lisMappingPageVO);
  59. List<LisMappingPageDTO> records = dtoPage.getRecords();
  60. List<String> userIds = records.stream().map(record -> record.getModifier()).collect(Collectors.toList());
  61. RespDTO<Map<String, String>> data = userServiceClient.getUserInfoByIds(userIds);
  62. Map<String, String> userInfos = data.data;
  63. for (LisMappingPageDTO record : records) {
  64. record.setGmtOperate(record.getGmtModified());
  65. record.setOperator(record.getModifier());
  66. record.setOperatorName(userInfos.get(record.getModifier()));
  67. }
  68. dtoPage.setRecords(records);
  69. return dtoPage;
  70. }
  71. /**
  72. * 保存化验公表映射关系
  73. *
  74. * @param lisMappingVO
  75. * @return
  76. */
  77. public Boolean saveLisMapping(LisMappingVO lisMappingVO) {
  78. String userId = UserUtils.getCurrentPrincipleID();
  79. Date now = DateUtil.now();
  80. LisMapping lisMapping = new LisMapping();
  81. lisMapping.setCreator(userId);
  82. lisMapping.setGmtCreate(now);
  83. //验证医学术语是否存在
  84. Concept mealConcept = conceptFacade.getById(lisMappingVO.getMealId());
  85. if (mealConcept == null) {
  86. throw new CommonException(CommonErrorCode.SERVER_IS_ERROR, "化验套餐项术语不存在");
  87. }
  88. if (lisMappingVO.getItemId() != null && !lisMappingVO.getItemId().equals(0L)) {
  89. Concept itemConcept = conceptFacade.getById(lisMappingVO.getItemId());
  90. if (itemConcept == null) {
  91. throw new CommonException(CommonErrorCode.SERVER_IS_ERROR, "化验明细项术语不存在");
  92. }
  93. }
  94. Concept uniqueConcept = conceptFacade.getById(lisMappingVO.getUniqueId());
  95. if (uniqueConcept == null) {
  96. throw new CommonException(CommonErrorCode.SERVER_IS_ERROR, "化验公表项项术语不存在");
  97. }
  98. QueryWrapper<LisMapping> lisMappingQueryWrapper = new QueryWrapper<>();
  99. lisMappingQueryWrapper.eq("is_deleted", IsDeleteEnum.N.getKey())
  100. .eq("meal_id", lisMappingVO.getMealId());
  101. if (lisMappingVO.getItemId() == null || lisMappingVO.getItemId().equals(0L)) {
  102. lisMappingQueryWrapper.and(i -> i.isNull("item_id").or(j -> j.eq("item_id", "0")));
  103. } else {
  104. lisMappingQueryWrapper.eq("item_id", lisMappingVO.getItemId());
  105. }
  106. List<LisMapping> lisMappingList = this.list(lisMappingQueryWrapper);
  107. if (lisMappingList.size() > 1) {
  108. throw new CommonException(CommonErrorCode.SERVER_IS_ERROR, "存在多条映射关系,请删除重复映射");
  109. } else if (lisMappingList.size() == 1) {
  110. lisMapping = lisMappingList.get(0);
  111. }
  112. lisMapping.setMealId(lisMappingVO.getMealId());
  113. if (lisMappingVO.getItemId() == null || lisMappingVO.getItemId().equals(0L)) {
  114. lisMapping.setItemId(0L);
  115. } else {
  116. lisMapping.setItemId(lisMappingVO.getItemId());
  117. }
  118. lisMapping.setUniqueId(lisMappingVO.getUniqueId());
  119. lisMapping.setModifier(userId);
  120. lisMapping.setGmtModified(now);
  121. lisMapping.setIsDeleted(IsDeleteEnum.N.getKey());
  122. Boolean state = this.saveOrUpdate(lisMapping);
  123. //清除缓存
  124. KLQuestionVO klQuestionVO = new KLQuestionVO();
  125. List<String> mealNames = Lists.newArrayList();
  126. mealNames.add(mealConcept.getLibName());
  127. klQuestionVO.setNames(mealNames);
  128. klQuestionVO.setTagNames(mealNames);
  129. klQuestionVO.setType(5);
  130. List<Integer> tagTypes = Lists.newArrayList();
  131. tagTypes.add(7);
  132. klQuestionVO.setTagType(tagTypes);
  133. RespDTO<List<QuestionInfo>> respDTO = icssManServiceClient.indexForkl(klQuestionVO);
  134. if (RespDTOUtil.respIsOK(respDTO)) {
  135. List<QuestionInfo> questionInfoList = respDTO.data;
  136. if (ListUtil.isNotEmpty(questionInfoList)) {
  137. IdListVO idListVO = new IdListVO();
  138. List<Long> idList = questionInfoList.stream().map(i -> i.getId()).collect(Collectors.toList());
  139. idListVO.setIdList(idList);
  140. RespDTO<Boolean> cacheRespDTO = icssManServiceClient.clearCache(idListVO);
  141. }
  142. }
  143. return state;
  144. }
  145. /**
  146. * 判断映射关系是否已存在
  147. *
  148. * @param lisMappingVO
  149. * @return
  150. */
  151. public Boolean hasLisMapping(LisMappingVO lisMappingVO) {
  152. QueryWrapper<LisMapping> lisMappingQueryWrapper = new QueryWrapper<>();
  153. lisMappingQueryWrapper.eq("is_deleted", IsDeleteEnum.N.getKey())
  154. .eq("meal_id", lisMappingVO.getMealId());
  155. if (lisMappingVO.getItemId() == null || lisMappingVO.getItemId().equals(0L)) {
  156. lisMappingQueryWrapper.and(i -> i.isNull("item_id").or(j -> j.eq("item_id", "0")));
  157. } else {
  158. lisMappingQueryWrapper.eq("item_id", lisMappingVO.getItemId());
  159. }
  160. List<LisMapping> lisMappingList = this.list(lisMappingQueryWrapper);
  161. if (ListUtil.isNotEmpty(lisMappingList)) {
  162. return true;
  163. } else {
  164. return false;
  165. }
  166. }
  167. /**
  168. * 删除单条化验公表映射关系
  169. *
  170. * @param idVO
  171. * @return
  172. */
  173. public Boolean delLisMappingById(IdVO idVO) {
  174. String userId = UserUtils.getCurrentPrincipleID();
  175. Date now = DateUtil.now();
  176. LisMapping lisMapping = this.getById(idVO.getId());
  177. if (lisMapping == null) {
  178. throw new CommonException(CommonErrorCode.NOT_EXISTS, "映射关系不存在,不允许删除");
  179. }
  180. lisMapping.setIsDeleted(IsDeleteEnum.Y.getKey());
  181. lisMapping.setModifier(userId);
  182. lisMapping.setGmtModified(now);
  183. Boolean state = this.updateById(lisMapping);
  184. //清除缓存
  185. Concept mealConcept = conceptFacade.getById(lisMapping.getMealId());
  186. KLQuestionVO klQuestionVO = new KLQuestionVO();
  187. List<String> mealNames = Lists.newArrayList();
  188. mealNames.add(mealConcept.getLibName());
  189. klQuestionVO.setNames(mealNames);
  190. klQuestionVO.setTagNames(mealNames);
  191. klQuestionVO.setType(5);
  192. List<Integer> tagTypes = Lists.newArrayList();
  193. tagTypes.add(7);
  194. klQuestionVO.setTagType(tagTypes);
  195. RespDTO<List<QuestionInfo>> respDTO = icssManServiceClient.indexForkl(klQuestionVO);
  196. if (RespDTOUtil.respIsOK(respDTO)) {
  197. List<QuestionInfo> questionInfoList = respDTO.data;
  198. if (ListUtil.isNotEmpty(questionInfoList)) {
  199. IdListVO idListVO = new IdListVO();
  200. List<Long> idList = questionInfoList.stream().map(i -> i.getId()).collect(Collectors.toList());
  201. idListVO.setIdList(idList);
  202. RespDTO<Boolean> cacheRespDTO = icssManServiceClient.clearCache(idListVO);
  203. }
  204. }
  205. return state;
  206. }
  207. /**
  208. * 获取化验公表名称
  209. *
  210. * @param getUniqueNameVO
  211. * @return
  212. */
  213. public String getLisUniqueName(GetUniqueNameVO getUniqueNameVO) {
  214. String uniqueName = "";
  215. QueryWrapper<Concept> conceptQueryWrapper = new QueryWrapper<>();
  216. conceptQueryWrapper.eq("is_deleted", IsDeleteEnum.N.getKey())
  217. .eq("lib_name", getUniqueNameVO.getMealName())
  218. .eq("lib_type", LexiconTypeEnum.LIS_PACKAGE.getKey());
  219. Concept mealConcept = conceptFacade.getOne(conceptQueryWrapper, false);
  220. if (mealConcept == null) {
  221. throw new CommonException(CommonErrorCode.NOT_EXISTS, "化验大项【" + getUniqueNameVO.getMealName() + "】不存在");
  222. }
  223. Concept itemConcept = null;
  224. if (StringUtil.isNotBlank(getUniqueNameVO.getItemName())) {
  225. conceptQueryWrapper = new QueryWrapper<>();
  226. conceptQueryWrapper.eq("is_deleted", IsDeleteEnum.N.getKey())
  227. .eq("lib_name", getUniqueNameVO.getItemName())
  228. .eq("lib_type", LexiconTypeEnum.LIS_DETAILS.getKey());
  229. itemConcept = conceptFacade.getOne(conceptQueryWrapper, false);
  230. if (itemConcept == null) {
  231. throw new CommonException(CommonErrorCode.NOT_EXISTS, "化验小项【" + getUniqueNameVO.getItemName() + "】不存在");
  232. }
  233. }
  234. QueryWrapper<LisMapping> lisMappingQueryWrapper = new QueryWrapper<>();
  235. lisMappingQueryWrapper.eq("is_deleted", IsDeleteEnum.N.getKey())
  236. .eq("meal_id", mealConcept.getId());
  237. if (itemConcept == null) {
  238. lisMappingQueryWrapper.and(i -> i.isNull("item_id").or(j -> j.eq("item_id", 0L)));
  239. } else {
  240. lisMappingQueryWrapper.eq("item_id", itemConcept.getId());
  241. }
  242. List<LisMapping> lisMappingList = this.list(lisMappingQueryWrapper);
  243. if (ListUtil.isNotEmpty(lisMappingList)) {
  244. Concept uniqueConcept = conceptFacade.getById(lisMappingList.get(0).getUniqueId());
  245. if (uniqueConcept != null) {
  246. uniqueName = uniqueConcept.getLibName();
  247. }
  248. }
  249. return uniqueName;
  250. }
  251. /**
  252. * 根据套餐和明细项获取化验公表
  253. *
  254. * @param lisMappingSearchList
  255. * @return
  256. */
  257. public List<LisMappingSearch> getLisUniqueNameWithList(List<LisMappingSearch> lisMappingSearchList) {
  258. List<LisMappingSearch> res = getUniqueName(lisMappingSearchList);
  259. if (ListUtil.isNotEmpty(res)) {
  260. Map<String, String> map = res.stream().collect(Collectors.toMap((r -> r.getMealName() + "__" + r.getItemName()), (r -> r.getUniqueName())));
  261. for(LisMappingSearch mappingListVO : lisMappingSearchList) {
  262. mappingListVO.setUniqueName(map.get(mappingListVO.getMealName() + "__" + mappingListVO.getItemName()));
  263. }
  264. }
  265. return lisMappingSearchList;
  266. }
  267. /**
  268. * 加载全部公表项数据
  269. *
  270. * @return 返回公表项内容,格式:套餐__明细__公表项
  271. */
  272. public Set<String> loadLisMappingFac() {
  273. return this.loadLisMapping();
  274. }
  275. /**
  276. * 获取化验套餐
  277. *
  278. * @param uniqueNames
  279. * @return
  280. */
  281. public List<String> getMealNameByUniqueNames(List<String> uniqueNames) {
  282. Map<String, Object> paramMap = new HashMap<>();
  283. paramMap.put("uniqueNames", uniqueNames);
  284. List<LisMappingWrapper> lisMappingWrapperList = this.getLisMappingByName(paramMap);
  285. List<String> mealNames = lisMappingWrapperList.stream().map(i -> i.getMealName()).filter(j -> j != null)
  286. .distinct().collect(Collectors.toList());
  287. return mealNames;
  288. }
  289. /**
  290. * 获取化验套餐
  291. *
  292. * @param itemNames
  293. * @return
  294. */
  295. public List<String> getMealNameByItemNames(List<String> itemNames) {
  296. Map<String, Object> paramMap = new HashMap<>();
  297. paramMap.put("itemNames", itemNames);
  298. List<LisMappingWrapper> lisMappingWrapperList = this.getLisMappingByName(paramMap);
  299. List<String> mealNames = lisMappingWrapperList.stream().map(i -> i.getMealName())
  300. .filter(j -> j != null).distinct().collect(Collectors.toList());
  301. return mealNames;
  302. }
  303. }