QcresultInfoFacade.java 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368
  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.diagbot.dto.AlgorithmDTO;
  5. import com.diagbot.dto.AnalyzeDTO;
  6. import com.diagbot.dto.QcResultDTO;
  7. import com.diagbot.entity.BehospitalInfo;
  8. import com.diagbot.entity.MedCheckInfo;
  9. import com.diagbot.entity.MedQcresultCases;
  10. import com.diagbot.entity.QcresultDetail;
  11. import com.diagbot.entity.QcresultInfo;
  12. import com.diagbot.enums.IsDeleteEnum;
  13. import com.diagbot.exception.CommonErrorCode;
  14. import com.diagbot.exception.CommonException;
  15. import com.diagbot.service.impl.MedQcresultCasesServiceImpl;
  16. import com.diagbot.service.impl.QcresultDetailServiceImpl;
  17. import com.diagbot.service.impl.QcresultInfoServiceImpl;
  18. import com.diagbot.util.BeanUtil;
  19. import com.diagbot.util.DateUtil;
  20. import com.diagbot.util.ListUtil;
  21. import com.diagbot.util.StringUtil;
  22. import com.diagbot.util.SysUserUtils;
  23. import com.diagbot.vo.AlgorithmVO;
  24. import com.diagbot.vo.AnalyzeVO;
  25. import com.diagbot.vo.GetDetailVO;
  26. import com.diagbot.vo.MedQcresultCasesVO;
  27. import com.diagbot.vo.QcResultAlgVO;
  28. import com.diagbot.vo.QcresultVO;
  29. import org.springframework.beans.factory.annotation.Autowired;
  30. import org.springframework.beans.factory.annotation.Qualifier;
  31. import org.springframework.stereotype.Component;
  32. import java.util.ArrayList;
  33. import java.util.Date;
  34. import java.util.List;
  35. /**
  36. * @Description:
  37. * @Author:zhaops
  38. * @time: 2020/4/13 17:22
  39. */
  40. @Component
  41. public class QcresultInfoFacade extends QcresultInfoServiceImpl {
  42. @Autowired
  43. @Qualifier("qcresultDetailServiceImpl")
  44. private QcresultDetailServiceImpl qcresultDetailServiceImpl;
  45. @Autowired
  46. private AlgorithmFacade algorithmFacade;
  47. @Autowired
  48. private BehospitalInfoFacade behospitalInfoFacade;
  49. @Autowired
  50. private MedCheckInfoFacade medCheckInfoFacade;
  51. @Autowired
  52. @Qualifier("medQcresultCasesServiceImpl")
  53. private MedQcresultCasesServiceImpl medQcresultCasesService;
  54. /**
  55. * 修改评分结果信息
  56. *
  57. * @param qcresultVO 修改评分结果信息
  58. * @return 评分的结果
  59. */
  60. public AnalyzeDTO changeQcResult(QcresultVO qcresultVO) {
  61. //入参验证
  62. if (StringUtil.isBlank(qcresultVO.getBehospitalCode())) {
  63. throw new CommonException(CommonErrorCode.PARAM_IS_NULL, "病历id不能为空!");
  64. }
  65. if (null == qcresultVO.getOptResultAlgVO()) {
  66. throw new CommonException(CommonErrorCode.PARAM_IS_NULL, "操作条目不能为空!");
  67. }
  68. Long hospitalId = Long.valueOf(SysUserUtils.getCurrentHospitalID());
  69. //验证病历的存在性
  70. List<BehospitalInfo> behospitalInfos
  71. = behospitalInfoFacade.list(
  72. new QueryWrapper<BehospitalInfo>()
  73. .eq("is_deleted", IsDeleteEnum.N.getKey())
  74. .eq("hospital_id", hospitalId)
  75. .eq("behospital_code", qcresultVO.getBehospitalCode()));
  76. if (behospitalInfos.size() != 1) {
  77. throw new CommonException(CommonErrorCode.NOT_EXISTS, "该医院下该病历号不存在!");
  78. }
  79. //验证是否评估过
  80. QcresultInfo qcresultInfo
  81. = this.getOne(
  82. new QueryWrapper<QcresultInfo>()
  83. .eq("is_deleted", IsDeleteEnum.N.getKey())
  84. .eq("hospital_id", hospitalId)
  85. .eq("behospital_code", qcresultVO.getBehospitalCode()), false);
  86. if (null == qcresultInfo) {
  87. throw new CommonException(CommonErrorCode.NOT_EXISTS, "该病历尚未评分,请先评分!");
  88. }
  89. //查询质控评分明细信息
  90. qcresultVO.setHospitalId(hospitalId);
  91. List<QcresultDetail> qcresultDetails
  92. = qcresultDetailServiceImpl.list(
  93. new QueryWrapper<QcresultDetail>()
  94. .eq("is_deleted", IsDeleteEnum.N.getKey())
  95. .eq("hospital_id", hospitalId)
  96. .eq("behospital_code", qcresultVO.getBehospitalCode()));
  97. //评分
  98. AlgorithmVO algorithmVO = new AlgorithmVO();
  99. List<QcResultAlgVO> qcResultAlgVOList
  100. = BeanUtil.listCopyTo(qcresultDetails, QcResultAlgVO.class);
  101. algorithmVO.setType(qcresultVO.getType());
  102. algorithmVO.setOptResultAlgVO(qcresultVO.getOptResultAlgVO());
  103. algorithmVO.setQcResultAlgVOList(qcResultAlgVOList);
  104. algorithmVO.setHospitalId(hospitalId);
  105. algorithmVO.setBehospitalCode(qcresultVO.getBehospitalCode());
  106. algorithmVO.setIsPlacefile(behospitalInfos.get(0).getIsPlacefile());
  107. algorithmVO.setDelStatus(qcresultVO.getDelStatus());
  108. AlgorithmDTO algorithmDTO = algorithmFacade.getAlgorithmRes(algorithmVO);
  109. //更新质控评分结果信息
  110. AnalyzeVO analyzeVO = new AnalyzeVO();
  111. analyzeVO.setHospitalId(hospitalId);
  112. analyzeVO.setBehospitalCode(qcresultVO.getBehospitalCode());
  113. analyzeVO.setDelStatus(qcresultVO.getDelStatus());
  114. Date date = this.saveQcResult(algorithmDTO, algorithmVO, analyzeVO, null, null, false, qcresultInfo);
  115. //返回参数组装
  116. AnalyzeDTO analyzeDTO = new AnalyzeDTO();
  117. analyzeDTO.setBehospitalCode(qcresultVO.getBehospitalCode());
  118. analyzeDTO.setIsSuccess(true);
  119. analyzeDTO.setGradeType(2);
  120. analyzeDTO.setGradeTypeName("人工");
  121. analyzeDTO.setScoreRes(algorithmDTO.getScore());
  122. analyzeDTO.setLevel(algorithmDTO.getLevel());
  123. analyzeDTO.setGradeTime(date);
  124. return analyzeDTO;
  125. }
  126. /**
  127. * 保存评分结果信息
  128. *
  129. * @param algorithmDTO 评分结果
  130. * @param algorithmVO 操作的条目
  131. * @param analyzeVO 病历信息
  132. * @param pageData 大数据解析出来的页面信息
  133. * @param menuData 菜单信息
  134. * @param isTask 是否是任务
  135. * @return 评分的时间
  136. */
  137. public Date saveQcResult(AlgorithmDTO algorithmDTO, AlgorithmVO algorithmVO, AnalyzeVO analyzeVO,
  138. String pageData, String menuData, Boolean isTask, QcresultInfo qcresultInfoOld) {
  139. //更新质控评分结果信息
  140. Long useId = 0L;
  141. if (!isTask) {
  142. try {
  143. useId = Long.valueOf(SysUserUtils.getCurrentPrincipleID());
  144. } catch (Exception e) {
  145. //analyze_run运行质控没有登录认证 所以会获取不到
  146. useId = 952795279527L;
  147. }
  148. }
  149. Date now = DateUtil.now();
  150. //逻辑删除记录
  151. this.update(new UpdateWrapper<QcresultInfo>()
  152. .eq("is_deleted", IsDeleteEnum.N.getKey())
  153. .eq("hospital_id", analyzeVO.getHospitalId())
  154. .eq("behospital_code", analyzeVO.getBehospitalCode())
  155. .set("is_deleted", IsDeleteEnum.Y.getKey())
  156. .set("modifier", useId)
  157. .set("gmt_modified", now));
  158. //新增记录
  159. QcresultInfo qcresultInfo = new QcresultInfo();
  160. if (qcresultInfoOld != null) {
  161. //新增、删除、修改时的操作
  162. BeanUtil.copyProperties(qcresultInfoOld, qcresultInfo);
  163. } else {
  164. //基本评分是的操作
  165. qcresultInfo.setHaveHomePage(analyzeVO.getHaveHomePage());
  166. }
  167. qcresultInfo.setBehospitalCode(analyzeVO.getBehospitalCode());
  168. qcresultInfo.setHospitalId(analyzeVO.getHospitalId());
  169. qcresultInfo.setScoreRes(algorithmDTO.getScore());
  170. qcresultInfo.setLevel(algorithmDTO.getLevel());
  171. if (algorithmVO.getType().equals(0)) {
  172. qcresultInfo.setGradeType(1);
  173. } else {
  174. qcresultInfo.setGradeType(2);
  175. }
  176. if (StringUtil.isNotBlank(pageData)) {
  177. qcresultInfo.setPageData(pageData);
  178. }
  179. if (StringUtil.isNotBlank(menuData)) {
  180. qcresultInfo.setMenuData(menuData);
  181. }
  182. qcresultInfo.setGmtCreate(now);
  183. qcresultInfo.setCreator(useId.toString());
  184. qcresultInfo.setGmtModified(now);
  185. qcresultInfo.setModifier(useId.toString());
  186. this.save(qcresultInfo);
  187. //更新质控评分明细信息
  188. switch (algorithmVO.getType()) {
  189. //自动评分
  190. case 0:
  191. //删除记录
  192. qcresultDetailServiceImpl.remove(new QueryWrapper<QcresultDetail>()
  193. .eq("hospital_id", analyzeVO.getHospitalId())
  194. .eq("behospital_code", analyzeVO.getBehospitalCode()));
  195. //批量插入新的数据
  196. List<QcresultDetail> qcresultDetailList = new ArrayList<>();
  197. List<QcResultAlgVO> qcResultAlgVORes = algorithmVO.getQcResultAlgVOList();
  198. if (ListUtil.isNotEmpty(qcResultAlgVORes)) {
  199. for (QcResultAlgVO qcResultAlgVO : qcResultAlgVORes) {
  200. QcresultDetail qcresultDetail = new QcresultDetail();
  201. BeanUtil.copyProperties(qcResultAlgVO, qcresultDetail);
  202. qcresultDetail.setHospitalId(analyzeVO.getHospitalId());
  203. qcresultDetail.setBehospitalCode(analyzeVO.getBehospitalCode());
  204. qcresultDetail.setGradeType(1);
  205. qcresultDetail.setOptType(1);
  206. qcresultDetail.setGmtCreate(now);
  207. qcresultDetail.setCreator(useId.toString());
  208. qcresultDetail.setGmtModified(now);
  209. qcresultDetail.setModifier(useId.toString());
  210. qcresultDetail.setInfo(StringUtil.isNotBlank(qcResultAlgVO.getInfo()) ? qcResultAlgVO.getInfo() : "");
  211. qcresultDetailList.add(qcresultDetail);
  212. }
  213. qcresultDetailServiceImpl.saveBatch(qcresultDetailList);
  214. }
  215. break;
  216. case 1:
  217. //新增条目
  218. QcresultDetail qcresultDetailAdd = new QcresultDetail();
  219. BeanUtil.copyProperties(algorithmVO.getOptResultAlgVO(), qcresultDetailAdd);
  220. qcresultDetailAdd.setGradeType(2);
  221. qcresultDetailAdd.setOptType(1);
  222. qcresultDetailAdd.setHospitalId(analyzeVO.getHospitalId());
  223. qcresultDetailAdd.setBehospitalCode(analyzeVO.getBehospitalCode());
  224. qcresultDetailAdd.setGmtCreate(now);
  225. qcresultDetailAdd.setCreator(useId.toString());
  226. qcresultDetailAdd.setGmtModified(now);
  227. qcresultDetailAdd.setModifier(useId.toString());
  228. qcresultDetailServiceImpl.save(qcresultDetailAdd);
  229. break;
  230. case 2:
  231. //删除条目
  232. qcresultDetailServiceImpl.remove(new QueryWrapper<QcresultDetail>()
  233. .eq("id", algorithmVO.getOptResultAlgVO().getId())
  234. .eq("hospital_id", analyzeVO.getHospitalId())
  235. .eq("behospital_code", analyzeVO.getBehospitalCode())
  236. );
  237. break;
  238. case 3:
  239. //修改条目
  240. qcresultDetailServiceImpl.update(new UpdateWrapper<QcresultDetail>()
  241. .eq("id", algorithmVO.getOptResultAlgVO().getId())
  242. .eq("is_deleted", IsDeleteEnum.N.getKey())
  243. .eq("hospital_id", analyzeVO.getHospitalId())
  244. .eq("behospital_code", analyzeVO.getBehospitalCode())
  245. .set("msg", algorithmVO.getOptResultAlgVO().getMsg())
  246. .set("score", algorithmVO.getOptResultAlgVO().getScore())
  247. .set("opt_type", 3)
  248. .set("grade_type",2)
  249. .set("modifier", useId)
  250. .set("gmt_modified", now)
  251. .set("explain_info",algorithmVO.getOptResultAlgVO().getExplainInfo())
  252. );
  253. break;
  254. case 4:
  255. //获取病历核查人员id,该操作只能是核查员操作
  256. Long checkId = medCheckInfoFacade.getOne(new QueryWrapper<MedCheckInfo>()
  257. .eq("is_deleted", IsDeleteEnum.N.getKey())
  258. .eq("hospital_id", analyzeVO.getHospitalId())
  259. .eq("behospital_code", analyzeVO.getBehospitalCode())).getCheckId();
  260. if(checkId==null)
  261. {
  262. throw new CommonException(CommonErrorCode.SERVER_IS_ERROR, "病历没有分配核查人员");
  263. }
  264. if(!checkId.equals(useId))
  265. {
  266. throw new CommonException(CommonErrorCode.SERVER_IS_ERROR, "当前用户不是分配的核查人员");
  267. }
  268. //逻辑删除质控明细 0删除
  269. if(analyzeVO.getDelStatus()==0)
  270. {
  271. qcresultDetailServiceImpl.update(new UpdateWrapper<QcresultDetail>()
  272. .eq("id", algorithmVO.getOptResultAlgVO().getId())
  273. .eq("is_deleted", IsDeleteEnum.N.getKey())
  274. .eq("hospital_id", analyzeVO.getHospitalId())
  275. .eq("behospital_code", analyzeVO.getBehospitalCode())
  276. .set("is_deleted", IsDeleteEnum.Y.getKey())
  277. .set("grade_type",2)
  278. .set("opt_type", 2)
  279. .set("modifier", useId)
  280. .set("gmt_modified", now)
  281. );
  282. }
  283. //1恢复
  284. else if(analyzeVO.getDelStatus()==1)
  285. {
  286. //该条目是机器插入条目
  287. qcresultDetailServiceImpl.update(new UpdateWrapper<QcresultDetail>()
  288. .eq("id", algorithmVO.getOptResultAlgVO().getId())
  289. .eq("is_deleted", IsDeleteEnum.Y.getKey())
  290. .eq("hospital_id", analyzeVO.getHospitalId())
  291. .eq("behospital_code", analyzeVO.getBehospitalCode())
  292. .set("is_deleted", IsDeleteEnum.N.getKey())
  293. .set("grade_type",2)
  294. .set("opt_type", 1)
  295. .set("modifier", useId)
  296. .set("remark", null)
  297. .set("gmt_modified", now)
  298. );
  299. }
  300. else {
  301. throw new CommonException(CommonErrorCode.PARAM_IS_ERROR, "delStatus参数错误");
  302. }
  303. break;
  304. default:
  305. /* DO NOTHING */
  306. break;
  307. }
  308. //质控模块评分数据
  309. //统一为长兴的算法
  310. //逻辑删除数据
  311. medQcresultCasesService.update(new UpdateWrapper<MedQcresultCases>()
  312. .eq("is_deleted", IsDeleteEnum.N.getKey())
  313. .eq("hospital_id", analyzeVO.getHospitalId())
  314. .eq("behospital_code", analyzeVO.getBehospitalCode())
  315. .set("is_deleted", IsDeleteEnum.Y.getKey())
  316. .set("modifier", useId)
  317. .set("gmt_modified", now));
  318. //批量插入新的数据
  319. List<MedQcresultCases> medQcresultCasesList = new ArrayList<>();
  320. List<MedQcresultCasesVO> medQcresultCasesVOList = algorithmVO.getMedQcresultCasesVOList();
  321. if (ListUtil.isNotEmpty(medQcresultCasesVOList)) {
  322. for (MedQcresultCasesVO medQcresultCasesVO : medQcresultCasesVOList) {
  323. MedQcresultCases medQcresultCases = new MedQcresultCases();
  324. BeanUtil.copyProperties(medQcresultCasesVO, medQcresultCases);
  325. medQcresultCases.setGmtCreate(now);
  326. medQcresultCases.setCreator(useId.toString());
  327. medQcresultCases.setGmtModified(now);
  328. medQcresultCases.setModifier(useId.toString());
  329. medQcresultCasesList.add(medQcresultCases);
  330. }
  331. medQcresultCasesService.saveBatch(medQcresultCasesList);
  332. }
  333. return now;
  334. }
  335. /**
  336. * 获取评分主表信息
  337. *
  338. * @param getDetailVO
  339. * @return
  340. */
  341. public QcResultDTO getByBehospitalCode(GetDetailVO getDetailVO) {
  342. QcResultDTO res = new QcResultDTO();
  343. QcresultInfo qcresultInfo = this.getOne(new QueryWrapper<QcresultInfo>()
  344. .eq("is_deleted", IsDeleteEnum.N.getKey())
  345. .eq("hospital_id", getDetailVO.getHospitalId())
  346. .eq("behospital_code", getDetailVO.getBehospitalCode()), false
  347. );
  348. if (qcresultInfo != null) {
  349. BeanUtil.copyProperties(qcresultInfo, res);
  350. } else {
  351. return null;
  352. }
  353. return res;
  354. }
  355. }