AHomePageFacade.java 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410
  1. package com.diagbot.facade.data;
  2. import com.alibaba.fastjson.JSON;
  3. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  4. import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
  5. import com.diagbot.dto.AnalyzeRunDTO;
  6. import com.diagbot.dto.RespDTO;
  7. import com.diagbot.dto.data.AHomePageDTO;
  8. import com.diagbot.entity.HomePage;
  9. import com.diagbot.enums.IsDeleteEnum;
  10. import com.diagbot.enums.data.*;
  11. import com.diagbot.facade.BehospitalInfoFacade;
  12. import com.diagbot.service.impl.HomePageServiceImpl;
  13. import com.diagbot.util.*;
  14. import com.diagbot.vo.AnalyzeRunVO;
  15. import com.diagbot.vo.data.*;
  16. import com.google.common.collect.Lists;
  17. import org.springframework.beans.factory.annotation.Autowired;
  18. import org.springframework.beans.factory.annotation.Qualifier;
  19. import org.springframework.stereotype.Component;
  20. import java.util.Date;
  21. import java.util.HashMap;
  22. import java.util.List;
  23. import java.util.Map;
  24. @Component
  25. public class AHomePageFacade extends HomePageServiceImpl{
  26. @Autowired
  27. @Qualifier("homePageServiceImpl")
  28. private HomePageServiceImpl homePageService;
  29. @Autowired
  30. private AHomeDiagnoseInfoFacade aHomeDiagnoseInfoFacade;
  31. @Autowired
  32. private AHomeOperationInfoFacade aHomeOperationInfoFacade;
  33. @Autowired
  34. private BehospitalInfoFacade behospitalInfoFacade;
  35. @Autowired
  36. private AMedAbnormalInfoFacade aMedAbnormalInfoFacade;
  37. @Autowired
  38. private ReadProperties readProperties;
  39. @Autowired
  40. private SqlProperties sqlProperties;
  41. private TZDBConn tzDBConn = new TZDBConn();
  42. /**
  43. * 同步前一天病案首页
  44. */
  45. public void executeHomePage() {
  46. //String sql="select * from br_rechome where cjcxrq>=dateadd(day,-2,getdate()) and cjcxrq<=getdate()";
  47. //同步前一天的数据
  48. //String sql="select * from br_rechome where cjcxrq>=(CONVERT(varchar,GETDATE()-2,23)) and cjcxrq<(CONVERT(varchar,GETDATE(),23))";
  49. //String sql = "select * from ai_v_sendhomepageing where behospitalcode in(select behospitalcode from AI_V_SENDPATIENTINFO where leavehospitaldate >=to_date('2020-10-01','yyyy-mm-dd') and leavehospitaldate<to_date('2020-11-22','yyyy-mm-dd'));";
  50. String sql = "select * from ai_v_sendhomepageing where behospitalcode in()";
  51. List<HomePage> homePageList = tzDBConn.getHomePage(sql);
  52. execute(homePageList);
  53. }
  54. /**
  55. * 运行质控-验证数据有效性
  56. * @param aHomePageIngVO
  57. * @return
  58. */
  59. public RespDTO<Map<String, Object>> executeHomePageIng(AHomePageIngVO aHomePageIngVO){
  60. try {
  61. if(aHomePageIngVO.getHomePages()!=null && aHomePageIngVO.getHomePages().size()>0){
  62. //验证数据有效性
  63. for (AHomePageVO aHomePageVO:aHomePageIngVO.getHomePages()) {
  64. if(StringUtil.isEmpty(aHomePageVO.getHomePageId())) {
  65. return RespDTO.onError("请输入病案首页编号!");
  66. }else if(aHomePageVO.getHospitalId()==null){
  67. return RespDTO.onError("请输入医院编码!");
  68. }else if(StringUtil.isEmpty(aHomePageVO.getBehospitalCode())){
  69. return RespDTO.onError("请输入病人住院编码!");
  70. }
  71. //出院诊断
  72. if(aHomePageVO.getLeaveDiags()!=null && aHomePageVO.getLeaveDiags().size()>0){
  73. for (AHomeDiagnoseVO aHomeDiagnoseVO:aHomePageVO.getLeaveDiags()){
  74. if(StringUtil.isEmpty(aHomeDiagnoseVO.getHomePageId())) {
  75. return RespDTO.onSuc("出院诊断未输入病案首页编号!");
  76. }else if(aHomeDiagnoseVO.getHospitalId()==null){
  77. return RespDTO.onSuc("出院诊断未输入医院编码!");
  78. }else if(StringUtil.isEmpty(aHomeDiagnoseVO.getDiagnoseOrderNo())){
  79. return RespDTO.onSuc("出院诊断未输入顺序号!");
  80. }
  81. }
  82. };
  83. //住院手术
  84. if(aHomePageVO.getOperations()!=null && aHomePageVO.getOperations().size()>0){
  85. for (AHomeOperationVO aHomeOperationVO:aHomePageVO.getOperations()){
  86. if(StringUtil.isEmpty(aHomeOperationVO.getHomePageId())) {
  87. return RespDTO.onSuc("住院手术未输入病案首页编号!");
  88. }else if(aHomeOperationVO.getHospitalId()==null){
  89. return RespDTO.onSuc("住院手术未输入医院编码!");
  90. }else if(StringUtil.isEmpty(aHomeOperationVO.getOperationOrderNo())){
  91. return RespDTO.onSuc("住院手术未输入顺序号!");
  92. }
  93. }
  94. }
  95. }
  96. //装载数据
  97. updateHomePageIng(aHomePageIngVO);
  98. //评分后返回结构体
  99. return homePageIng(aHomePageIngVO);
  100. }else{
  101. aMedAbnormalInfoFacade.saveAbnormalInfo("病案首页","",JSON.toJSONString(aHomePageIngVO),"","未接收到数据!");
  102. return RespDTO.onError("未接收到数据!");
  103. }
  104. }catch (Exception e){
  105. aMedAbnormalInfoFacade.saveAbnormalInfo("病案首页","",JSON.toJSONString(aHomePageIngVO),"",e.getMessage());
  106. if(e.getMessage().contains("该病历无关联的质控条目")){
  107. return RespDTO.onSuc(e.getMessage());
  108. }else {
  109. return RespDTO.onError(e.getMessage());
  110. }
  111. }
  112. }
  113. /**
  114. * 更新数据到数据库
  115. * @param aHomePageIngVO
  116. */
  117. private void updateHomePageIng(AHomePageIngVO aHomePageIngVO){
  118. try {
  119. List<HomePage> homePageList=Lists.newArrayList();
  120. aHomePageIngVO.getHomePages().stream().forEach(s->{
  121. //初始化入参
  122. HomePage homePage=new HomePage();
  123. BeanUtil.copyProperties(s,homePage);
  124. //if(StringUtil.isNotEmpty(s.getSex())){
  125. //性别,1:男,2:女
  126. //homePage.setSex(SexEnum.getName(s.getSex()));
  127. //}
  128. //if(StringUtil.isNotEmpty(s.getMarriage())){
  129. //婚姻,1:未婚,2:已婚,3:丧偶,4:离婚,9:其他
  130. //homePage.setMarriage(MarriageEnum.getName(s.getMarriage()));
  131. //}
  132. if(StringUtil.isNotEmpty(s.getIsMedAllergy())){
  133. //过敏史,1:无,2:有
  134. homePage.setIsMedAllergy(IsMedAllergyEnum.getName(s.getIsMedAllergy()));
  135. }
  136. if(StringUtil.isNotEmpty(s.getBehospitalWay())){
  137. //入院途径,1:急诊,2:门诊,3:其他医疗机构,9:其他
  138. homePage.setBehospitalWay(BehospitalWayEnum.getName(s.getBehospitalWay()));
  139. }
  140. if(StringUtil.isNotEmpty(s.getAutopsy())){
  141. //死亡患者尸检,1:是,2:否
  142. homePage.setAutopsy(AutopsyEnum.getName(s.getAutopsy()));
  143. }
  144. if(StringUtil.isNotEmpty(s.getBloodType())){
  145. //血型,1:A,2:B,3:O,4:AB,5:不详,6:未查
  146. homePage.setBloodType(BloodTypeEnum.getName(s.getBloodType()));
  147. }
  148. if(StringUtil.isNotEmpty(s.getRh())){
  149. //RH,1:阴,2:阳,3,不详,4,未查
  150. homePage.setRh(RHEnum.getName(s.getRh()));
  151. }
  152. if(StringUtil.isNotEmpty(s.getLeaveHospitalType())){
  153. //离院方式,1:医院离院,2:医嘱转院,3:医嘱转社区卫生服务机构/乡镇卫生院,4:非医嘱离院,5:死亡,9:其他
  154. homePage.setLeaveHospitalType(LeaveHospitalTypeEnum.getName(s.getLeaveHospitalType()));
  155. }
  156. if(StringUtil.isNotEmpty(s.getSingleDiagManage())){
  157. //单病种管理:1:有,2:无
  158. homePage.setSingleDiagManage(SingleDiagManageEnum.getName(s.getSingleDiagManage()));
  159. }
  160. if(StringUtil.isNotEmpty(s.getClinicPathwayManage())){
  161. //临床路径管理,1:完成,2:变异,3:退出,4:未入
  162. homePage.setClinicPathwayManage(ClinicPathwayManageEnum.getName(s.getClinicPathwayManage()));
  163. }
  164. if(StringUtil.isNotEmpty(s.getReturnToType())){
  165. //转归情况,1:治愈,2:好转,3:未愈,4:死亡,9:其他
  166. homePage.setReturnToType(ReturnToTypeEnum.getName(s.getReturnToType()));
  167. }
  168. if(StringUtil.isNotEmpty(s.getIsOutpatientBehospital())){
  169. homePage.setIsOutpatientBehospital(DiagnoseTypeEnum.getName(s.getIsOutpatientBehospital()));
  170. }
  171. if(StringUtil.isNotEmpty(s.getIsLeaveBehospital())){
  172. homePage.setIsLeaveBehospital(DiagnoseTypeEnum.getName(s.getIsLeaveBehospital()));
  173. }
  174. if(StringUtil.isNotEmpty(s.getIsOperationBeforeAfter())){
  175. homePage.setIsOperationBeforeAfter(DiagnoseTypeEnum.getName(s.getIsOperationBeforeAfter()));
  176. }
  177. if(StringUtil.isNotEmpty(s.getIsClinicPathology())){
  178. homePage.setIsClinicPathology(DiagnoseTypeEnum.getName(s.getIsClinicPathology()));
  179. }
  180. if(StringUtil.isNotEmpty(s.getIsRadiatePathology())){
  181. homePage.setIsRadiatePathology(DiagnoseTypeEnum.getName(s.getIsRadiatePathology()));
  182. }
  183. if(StringUtil.isNotEmpty(s.getAgainBehospitalPlan())){
  184. /**31天再住院计划*/
  185. homePage.setAgainBehospitalPlan(IsMedAllergyEnum.getName(s.getAgainBehospitalPlan()));
  186. }
  187. if(StringUtil.isNotEmpty(s.getHomePageQuality())){
  188. /**病案质量,1:甲,2:乙,3:丙*/
  189. homePage.setHomePageQuality(medicalRecordQualityEnum.getName(s.getHomePageQuality()));
  190. }
  191. if(StringUtil.isNotBlank(s.getBirthday())){
  192. homePage.setBirthday(DateUtil.parseDateTime(DateUtil.formatDateTime(DateUtil.parseDate(s.getBirthday(),"yyyy-MM-dd"))));
  193. }
  194. if(StringUtil.isNotBlank(s.getBehospitalDate())){
  195. homePage.setBehospitalDate(DateUtil.parseDateTime(DateUtil.formatDateTime(DateUtil.parseDate(s.getBehospitalDate(),"yyyy-MM-dd HH:mm"))));
  196. }
  197. if(StringUtil.isNotBlank(s.getLeaveHospitalDate())){
  198. homePage.setLeaveHospitalDate(DateUtil.parseDateTime(DateUtil.formatDateTime(DateUtil.parseDate(s.getLeaveHospitalDate(),"yyyy-MM-dd HH:mm"))));
  199. }
  200. if(StringUtil.isNotBlank(s.getQcDate())){
  201. homePage.setQcDate(DateUtil.parseDateTime(DateUtil.formatDateTime(DateUtil.parseDate(s.getQcDate(),"yyyy-MM-dd"))));
  202. }
  203. homePageList.add(homePage);
  204. //初始化诊断和手术,并同步到数据库
  205. aHomeDiagnoseInfoFacade.executeHomeDiagnose(s.getLeaveDiags());//首页诊断
  206. aHomeOperationInfoFacade.executeHomeOperation(s.getOperations());//首页手术
  207. });
  208. execute(homePageList);
  209. //aMedAbnormalInfoFacade.saveAbnormalInfo("病案首页",JSON.toJSONString(aHomePageIngVO),"","操作成功!");
  210. }catch (Exception e){
  211. aMedAbnormalInfoFacade.saveAbnormalInfo("病案首页","",JSON.toJSONString(aHomePageIngVO),"",e.getMessage());
  212. }
  213. }
  214. /**
  215. * 评分后返回结构体
  216. * @param aHomePageIngVO
  217. * @return
  218. */
  219. private RespDTO<Map<String, Object>> homePageIng(AHomePageIngVO aHomePageIngVO){
  220. try {
  221. String behospitalCode =aHomePageIngVO.getHomePages().get(0).getBehospitalCode();
  222. Long hospitalId=aHomePageIngVO.getHomePages().get(0).getHospitalId();
  223. Long modeId=Long.valueOf("6");//病案首页默认为6
  224. if(aHomePageIngVO.getDockModeType().equals("0")){
  225. Map<String,Object> map=new HashMap<String,Object>();
  226. List<AHomePageDTO> homePageDtoList=BeanUtil.listCopyTo(aHomePageIngVO.getHomePages(),AHomePageDTO.class);
  227. map.put("homePages",homePageDtoList);
  228. //aMedAbnormalInfoFacade.saveAbnormalInfo("病案首页",JSON.toJSONString(aHomePageIngVO),JSON.toJSONString(RespDTO.onSuc(map)),"操作成功!");
  229. return RespDTO.onSuc(map);
  230. }else if(aHomePageIngVO.getDockModeType().equals("1")){
  231. //页面模式
  232. String url=readProperties.getProcessQcUrl()+"?behospitalCode="+behospitalCode+"&hospitalId="+hospitalId+"&modeId="+modeId;
  233. Map<String,Object> map=new HashMap<String,Object>();
  234. map.put("url",url);
  235. //aMedAbnormalInfoFacade.saveAbnormalInfo("病案首页",JSON.toJSONString(aHomePageIngVO),JSON.toJSONString(RespDTO.onSuc(map)),"操作成功!");
  236. return RespDTO.onSuc(map);
  237. }else if(aHomePageIngVO.getDockModeType().equals("2")){
  238. AnalyzeRunVO analyzeRunVO=new AnalyzeRunVO();
  239. analyzeRunVO.setBehospitalCode(behospitalCode);
  240. analyzeRunVO.setHospitalId(hospitalId);
  241. analyzeRunVO.setModeId(modeId);
  242. AnalyzeRunDTO analyzeRunDTO=behospitalInfoFacade.analyzeRun(analyzeRunVO);
  243. Map<String,Object> map=new HashMap<String,Object>();
  244. if(analyzeRunDTO.getMsgDTOList().size()>0){
  245. map.put("analyze",analyzeRunDTO.getMsgDTOList());
  246. }
  247. //aMedAbnormalInfoFacade.saveAbnormalInfo("病案首页",JSON.toJSONString(aHomePageIngVO),JSON.toJSONString(RespDTO.onSuc(map)),"操作成功!");
  248. return RespDTO.onSuc(map);
  249. }else{
  250. //页面模式+接口引擎模式
  251. String url=readProperties.getProcessQcUrl()+"?behospitalCode="+behospitalCode+"&hospitalId="+hospitalId+"&modeId="+modeId;
  252. AnalyzeRunVO analyzeRunVO=new AnalyzeRunVO();
  253. analyzeRunVO.setBehospitalCode(behospitalCode);
  254. analyzeRunVO.setHospitalId(hospitalId);
  255. analyzeRunVO.setModeId(modeId);
  256. AnalyzeRunDTO analyzeRunDTO=behospitalInfoFacade.analyzeRun(analyzeRunVO);
  257. Map<String,Object> map=new HashMap<String,Object>();
  258. if(analyzeRunDTO.getMsgDTOList().size()>0){
  259. map.put("url",url);
  260. map.put("analyze",analyzeRunDTO.getMsgDTOList());
  261. }
  262. //aMedAbnormalInfoFacade.saveAbnormalInfo("病案首页",JSON.toJSONString(aHomePageIngVO),JSON.toJSONString(RespDTO.onSuc(map)),"操作成功!");
  263. return RespDTO.onSuc(map);
  264. }
  265. }catch (Exception e){
  266. aMedAbnormalInfoFacade.saveAbnormalInfo("病案首页","",JSON.toJSONString(aHomePageIngVO),"",e.getMessage());
  267. if(e.getMessage().contains("该病历无关联的质控条目")){
  268. return RespDTO.onSuc(e.getMessage());
  269. }else {
  270. return RespDTO.onError(e.getMessage());
  271. }
  272. }
  273. }
  274. /**
  275. * 终末质控-通过接口更新病案首页
  276. * @param list
  277. * @return
  278. */
  279. public RespDTO<List<AHomePageDTO>> executeHomePage(List<AHomePageVO> list) {
  280. try {
  281. if(list!=null && list.size()>0){
  282. //循环验证数据有效性
  283. for (AHomePageVO aHomePageVO:list) {
  284. if(StringUtil.isEmpty(aHomePageVO.getHomePageId())) {
  285. return RespDTO.onError("请输入病案首页编号!");
  286. }else if(aHomePageVO.getHospitalId()==null){
  287. return RespDTO.onError("请输入医院编码!");
  288. }else if(StringUtil.isEmpty(aHomePageVO.getBehospitalCode())){
  289. return RespDTO.onError("请输入病人住院编码!");
  290. }
  291. }
  292. //装载数据
  293. List<HomePage> homePageList=Lists.newArrayList();
  294. list.stream().forEach(s->{
  295. //初始化入参
  296. HomePage homePage=new HomePage();
  297. BeanUtil.copyProperties(s,homePage);
  298. if(StringUtil.isNotBlank(s.getBirthday())){
  299. homePage.setBirthday(DateUtil.parseDateTime(DateUtil.formatDateTime(DateUtil.parseDate(s.getBirthday(),"yyyy/MM/dd"))));
  300. }
  301. if(StringUtil.isNotBlank(s.getBehospitalDate())){
  302. homePage.setBehospitalDate(DateUtil.parseDateTime(DateUtil.formatDateTime(DateUtil.parseDate(s.getBehospitalDate(),"yyyy/MM/dd HH:mm"))));
  303. }
  304. if(StringUtil.isNotBlank(s.getLeaveHospitalDate())){
  305. homePage.setLeaveHospitalDate(DateUtil.parseDateTime(DateUtil.formatDateTime(DateUtil.parseDate(s.getLeaveHospitalDate(),"yyyy/MM/dd HH:mm"))));
  306. }
  307. if(StringUtil.isNotBlank(s.getQcDate())){
  308. homePage.setQcDate(DateUtil.parseDateTime(DateUtil.formatDateTime(DateUtil.parseDate(s.getQcDate(),"yyyy/MM/dd"))));
  309. }
  310. homePageList.add(homePage);
  311. });
  312. execute(homePageList);
  313. List<AHomePageDTO> homePageDtoList=BeanUtil.listCopyTo(list,AHomePageDTO.class);
  314. return RespDTO.onSuc(homePageDtoList);
  315. }else{
  316. aMedAbnormalInfoFacade.saveAbnormalInfo("病案首页","",JSON.toJSONString(list),"","未接收到数据!");
  317. return RespDTO.onError("未接收到数据!");
  318. }
  319. }catch (Exception e){
  320. aMedAbnormalInfoFacade.saveAbnormalInfo("病案首页","",JSON.toJSONString(list),"",e.getMessage());
  321. return RespDTO.onError(e.getMessage());
  322. }
  323. }
  324. /**
  325. * 病案首页
  326. * @param homePageList
  327. */
  328. public void execute(List<HomePage> homePageList){
  329. try {
  330. List<HomePage> addE = Lists.newLinkedList();
  331. List<HomePage> updateE = Lists.newLinkedList();
  332. if (homePageList != null && homePageList.size() > 0) {
  333. homePageList.stream().forEach(s -> {
  334. HomePage homePage = this.getOne(new QueryWrapper<HomePage>()
  335. .eq("home_page_id", s.getHomePageId())
  336. .eq("hospital_id", s.getHospitalId())
  337. .eq("behospital_code", s.getBehospitalCode()), false);
  338. if (homePage != null) {
  339. if(homePage.getIsDeleted().equals("Y")){
  340. s.setIsDeleted("N");
  341. }
  342. s.setGmtModified(new Date());
  343. updateE.add(s);
  344. } else {
  345. s.setGmtCreate(new Date());
  346. addE.add(s);
  347. }
  348. });
  349. }
  350. if(addE.size()>0){
  351. homePageService.saveBatch(addE);
  352. }
  353. if(updateE.size()>0){
  354. homePageService.updateBatchByKey(updateE);
  355. }
  356. //aMedAbnormalInfoFacade.saveAbnormalInfo("病案首页",JSON.toJSONString(homePageList),"","操作成功!");
  357. }catch (Exception e){
  358. aMedAbnormalInfoFacade.saveAbnormalInfo("病案首页","",JSON.toJSONString(homePageList),"",e.getMessage());
  359. }
  360. }
  361. public RespDTO deleteFlag(ADeleteFlagVO aDeleteFlagVO){
  362. try {
  363. //验证数据是否存在
  364. if(StringUtil.isEmpty(aDeleteFlagVO.getHomePageId())) {
  365. return RespDTO.onError("请输入病案首页编号!");
  366. }else if(aDeleteFlagVO.getHospitalId()==null){
  367. return RespDTO.onError("请输入医院编码!");
  368. }else if(StringUtil.isEmpty(aDeleteFlagVO.getBehospitalCode())){
  369. return RespDTO.onError("请输入病人住院编码!");
  370. }else {
  371. UpdateWrapper<HomePage> updateWrapper=new UpdateWrapper<>();
  372. updateWrapper.eq("home_page_id", aDeleteFlagVO.getHomePageId())
  373. .eq("hospital_id", aDeleteFlagVO.getHospitalId())
  374. .eq("behospital_code", aDeleteFlagVO.getBehospitalCode())
  375. .eq("is_deleted",IsDeleteEnum.N)
  376. .set("is_deleted",IsDeleteEnum.Y)
  377. .set("gmt_modified", DateUtil.now());
  378. Boolean flag=update(new HomePage(),updateWrapper);
  379. //aMedAbnormalInfoFacade.saveAbnormalInfo("病案首页-删除",JSON.toJSONString(aDeleteFlagVO),JSON.toJSONString(RespDTO.onSuc(flag)),"操作成功!");
  380. return RespDTO.onSuc(flag);
  381. }
  382. }catch (Exception e){
  383. aMedAbnormalInfoFacade.saveAbnormalInfo("病案首页-删除",aDeleteFlagVO.getRecId(), JSON.toJSONString(aDeleteFlagVO),"",e.getMessage());
  384. return RespDTO.onError(e.getMessage());
  385. }
  386. }
  387. }