AHomePageFacade.java 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295
  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.facade.BehospitalInfoFacade;
  11. import com.diagbot.service.impl.HomePageServiceImpl;
  12. import com.diagbot.util.*;
  13. import com.diagbot.vo.AnalyzeRunVO;
  14. import com.diagbot.vo.data.*;
  15. import com.google.common.collect.Lists;
  16. import org.springframework.beans.factory.annotation.Autowired;
  17. import org.springframework.beans.factory.annotation.Qualifier;
  18. import org.springframework.stereotype.Component;
  19. import java.util.Date;
  20. import java.util.HashMap;
  21. import java.util.List;
  22. import java.util.Map;
  23. @Component
  24. public class AHomePageFacade extends HomePageServiceImpl{
  25. @Autowired
  26. @Qualifier("homePageServiceImpl")
  27. private HomePageServiceImpl homePageService;
  28. @Autowired
  29. private AHomeDiagnoseInfoFacade aHomeDiagnoseInfoFacade;
  30. @Autowired
  31. private AHomeOperationInfoFacade aHomeOperationInfoFacade;
  32. @Autowired
  33. private BehospitalInfoFacade behospitalInfoFacade;
  34. @Autowired
  35. private ReadProperties readProperties;
  36. @Autowired
  37. private AMedAbnormalInfoFacade aMedAbnormalInfoFacade;
  38. private TZDBConn tzDBConn = new TZDBConn();
  39. /**
  40. * 同步前一天病案首页
  41. */
  42. public void executeHomePage() {
  43. //String sql="select * from br_rechome where cjcxrq>=dateadd(day,-2,getdate()) and cjcxrq<=getdate()";
  44. //同步前一天的数据
  45. String sql="select * from br_rechome where cjcxrq>=(select CONVERT(varchar,GETDATE()-2,23)) and cjcxrq<(select CONVERT(varchar,GETDATE(),23))";
  46. List<HomePage> homePageList = tzDBConn.getHomePage(sql);
  47. /*
  48. int mod=Math.floorMod(homePageList.size(),500);
  49. int div=Math.floorDiv(homePageList.size(),500);
  50. for (int i = 0; i <= homePageList.size(); i++) {
  51. System.out.println((i-1)*500+"---"+(i*500));
  52. homePageList=homePageList.subList((i*500),(i+1)*500);
  53. execute(homePageList);
  54. }
  55. */
  56. execute(homePageList);
  57. }
  58. /**
  59. * 运行质控-验证数据有效性
  60. * @param aHomePageIngVO
  61. * @return
  62. */
  63. public RespDTO<Map<String, Object>> executeHomePageIng(AHomePageIngVO aHomePageIngVO){
  64. if(aHomePageIngVO.getHomePages()!=null && aHomePageIngVO.getHomePages().size()>0){
  65. //验证数据有效性
  66. for (AHomePageVO aHomePageVO:aHomePageIngVO.getHomePages()) {
  67. if("".equals(aHomePageVO.getHomePageId())) {
  68. return RespDTO.onError("请输入病案首页编号!");
  69. }else if(aHomePageVO.getHospitalId()==null){
  70. return RespDTO.onError("请输入医院编码!");
  71. }else if("".equals(aHomePageVO.getBehospitalCode())){
  72. return RespDTO.onError("请输入病人住院编码!");
  73. }
  74. //出院诊断
  75. if(aHomePageVO.getLeaveDiags()!=null && aHomePageVO.getLeaveDiags().size()>0){
  76. for (AHomeDiagnoseVO aHomeDiagnoseVO:aHomePageVO.getLeaveDiags()){
  77. if("".equals(aHomeDiagnoseVO.getHomePageId())) {
  78. return RespDTO.onError("出院诊断未输入病案首页编号!");
  79. }else if(aHomeDiagnoseVO.getHospitalId()==null){
  80. return RespDTO.onError("出院诊断未输入医院编码!");
  81. }else if("".equals(aHomeDiagnoseVO.getDiagnoseOrderNo())){
  82. return RespDTO.onError("出院诊断未输入顺序号!");
  83. }
  84. }
  85. };
  86. //住院手术
  87. if(aHomePageVO.getOperations()!=null && aHomePageVO.getOperations().size()>0){
  88. for (AHomeOperationVO aHomeOperationVO:aHomePageVO.getOperations()){
  89. if("".equals(aHomeOperationVO.getHomePageId())) {
  90. return RespDTO.onError("住院手术未输入病案首页编号!");
  91. }else if(aHomeOperationVO.getHospitalId()==null){
  92. return RespDTO.onError("住院手术未输入医院编码!");
  93. }else if("".equals(aHomeOperationVO.getOperationOrderNo())){
  94. return RespDTO.onError("住院手术未输入顺序号!");
  95. }
  96. }
  97. }
  98. }
  99. //装载数据
  100. updateHomePageIng(aHomePageIngVO);
  101. //评分后返回结构体
  102. return homePageIng(aHomePageIngVO);
  103. }else{
  104. return RespDTO.onError("未接收到数据!");
  105. }
  106. }
  107. /**
  108. * 更新数据到数据库
  109. * @param aHomePageIngVO
  110. */
  111. private void updateHomePageIng(AHomePageIngVO aHomePageIngVO){
  112. try {
  113. List<HomePage> homePageList=Lists.newArrayList();
  114. aHomePageIngVO.getHomePages().stream().forEach(s->{
  115. //初始化入参
  116. HomePage homePage=new HomePage();
  117. BeanUtil.copyProperties(s,homePage);
  118. homePage.setBirthday(DateUtil.parseDate(s.getBirthday()));
  119. homePageList.add(homePage);
  120. //初始化诊断和手术,并同步到数据库
  121. aHomeDiagnoseInfoFacade.executeHomeDiagnose(s.getLeaveDiags());//首页诊断
  122. aHomeOperationInfoFacade.executeHomeOperation(s.getOperations());//首页手术
  123. });
  124. execute(homePageList);
  125. }catch (Exception e){
  126. log.error(e.getMessage(),e);
  127. aMedAbnormalInfoFacade.saveAbnormalInfo("病案首页","", JSON.toJSONString(aHomePageIngVO),"",e.getMessage());
  128. }
  129. }
  130. /**
  131. * 评分后返回结构体
  132. * @param aHomePageIngVO
  133. * @return
  134. */
  135. private RespDTO<Map<String, Object>> homePageIng(AHomePageIngVO aHomePageIngVO){
  136. String behospitalCode =aHomePageIngVO.getHomePages().get(0).getBehospitalCode();
  137. Long hospitalId=aHomePageIngVO.getHomePages().get(0).getHospitalId();
  138. Long modeId=Long.valueOf("6");//病案首页默认为6
  139. if(aHomePageIngVO.getDockModeType().equals("0")){
  140. Map<String,Object> map=new HashMap<String,Object>();
  141. List<AHomePageDTO> homePageDtoList=BeanUtil.listCopyTo(aHomePageIngVO.getHomePages(),AHomePageDTO.class);
  142. map.put("homePages",homePageDtoList);
  143. return RespDTO.onSuc(map);
  144. }else if(aHomePageIngVO.getDockModeType().equals("1")){
  145. //页面模式
  146. String url=readProperties.getProcessQcUrl()+"?behospitalCode="+behospitalCode+"&hospitalId="+hospitalId+"&modeId="+modeId;
  147. Map<String,Object> map=new HashMap<String,Object>();
  148. map.put("url",url);
  149. return RespDTO.onSuc(map);
  150. }else if(aHomePageIngVO.getDockModeType().equals("2")){
  151. AnalyzeRunVO analyzeRunVO=new AnalyzeRunVO();
  152. analyzeRunVO.setBehospitalCode(behospitalCode);
  153. analyzeRunVO.setHospitalId(hospitalId);
  154. analyzeRunVO.setModeId(modeId);
  155. AnalyzeRunDTO analyzeRunDTO=behospitalInfoFacade.analyzeRun(analyzeRunVO);
  156. Map<String,Object> map=new HashMap<String,Object>();
  157. if(analyzeRunDTO.getMsgDTOList().size()>0){
  158. map.put("analyze",analyzeRunDTO.getMsgDTOList());
  159. }
  160. return RespDTO.onSuc(map);
  161. }else{
  162. //页面模式+接口引擎模式
  163. String url=readProperties.getProcessQcUrl()+"?behospitalCode="+behospitalCode+"&hospitalId="+hospitalId+"&modeId="+modeId;
  164. AnalyzeRunVO analyzeRunVO=new AnalyzeRunVO();
  165. analyzeRunVO.setBehospitalCode(behospitalCode);
  166. analyzeRunVO.setHospitalId(hospitalId);
  167. analyzeRunVO.setModeId(modeId);
  168. AnalyzeRunDTO analyzeRunDTO=behospitalInfoFacade.analyzeRun(analyzeRunVO);
  169. Map<String,Object> map=new HashMap<String,Object>();
  170. if(analyzeRunDTO.getMsgDTOList().size()>0){
  171. map.put("url",url);
  172. map.put("analyze",analyzeRunDTO.getMsgDTOList());
  173. }
  174. return RespDTO.onSuc(map);
  175. }
  176. }
  177. /**
  178. * 通过接口更新病案首页-不包含医嘱和手术
  179. * @param list
  180. * @return
  181. */
  182. public RespDTO<List<AHomePageDTO>> executeHomePage(List<AHomePageVO> list) {
  183. if(list!=null && list.size()>0){
  184. //循环验证数据有效性
  185. for (AHomePageVO aHomePageVO:list) {
  186. if("".equals(aHomePageVO.getHomePageId())) {
  187. return RespDTO.onError("请输入病案首页编号!");
  188. }else if(aHomePageVO.getHospitalId()==null){
  189. return RespDTO.onError("请输入医院编码!");
  190. }else if("".equals(aHomePageVO.getBehospitalCode())){
  191. return RespDTO.onError("请输入病人住院编码!");
  192. }
  193. }
  194. //装载数据
  195. List<HomePage> homePageList=Lists.newArrayList();
  196. list.stream().forEach(s->{
  197. //初始化入参
  198. HomePage homePage=new HomePage();
  199. BeanUtil.copyProperties(s,homePage);
  200. homePage.setBirthday(DateUtil.parseDate(s.getBirthday()));
  201. homePage.setBehospitalDate(DateUtil.parseDateTime(s.getBehospitalDate()));
  202. homePage.setLeaveHospitalDate(DateUtil.parseDateTime(s.getLeaveHospitalDate()));
  203. homePage.setQcDate(DateUtil.parseDateTime(s.getQcDate()));
  204. homePageList.add(homePage);
  205. });
  206. execute(homePageList);
  207. List<AHomePageDTO> homePageDtoList=BeanUtil.listCopyTo(list,AHomePageDTO.class);
  208. return RespDTO.onSuc(homePageDtoList);
  209. }else{
  210. return RespDTO.onError("未接收到数据!");
  211. }
  212. }
  213. /**
  214. * 病案首页
  215. * @param homePageList
  216. */
  217. public void execute(List<HomePage> homePageList){
  218. try {
  219. List<HomePage> addE = Lists.newLinkedList();
  220. List<HomePage> updateE = Lists.newLinkedList();
  221. if (homePageList != null && homePageList.size() > 0) {
  222. homePageList.stream().forEach(s -> {
  223. HomePage homePage = this.getOne(new QueryWrapper<HomePage>()
  224. .eq("home_page_id", s.getHomePageId())
  225. .eq("hospital_id", s.getHospitalId())
  226. .eq("behospital_code", s.getBehospitalCode()), false);
  227. if (homePage != null) {
  228. s.setGmtModified(new Date());
  229. updateE.add(s);
  230. } else {
  231. s.setGmtCreate(new Date());
  232. addE.add(s);
  233. }
  234. });
  235. }
  236. if(addE.size()>0){
  237. homePageService.saveBatch(addE);
  238. }
  239. if(updateE.size()>0){
  240. homePageService.updateBatchByKey(updateE);
  241. }
  242. }catch (Exception e){
  243. log.error(e.getMessage(),e);
  244. aMedAbnormalInfoFacade.saveAbnormalInfo("病案首页","", JSON.toJSONString(homePageList),"",e.getMessage());
  245. }
  246. }
  247. public RespDTO deleteFlag(ADeleteFlagVO aDeleteFlagVO){
  248. try {
  249. //验证数据是否存在
  250. if(StringUtil.isEmpty(aDeleteFlagVO.getHomePageId())) {
  251. return RespDTO.onError("请输入病案首页编号!");
  252. }else if(aDeleteFlagVO.getHospitalId()==null){
  253. return RespDTO.onError("请输入医院编码!");
  254. }else if(StringUtil.isEmpty(aDeleteFlagVO.getBehospitalCode())){
  255. return RespDTO.onError("请输入病人住院编码!");
  256. }else {
  257. UpdateWrapper<HomePage> updateWrapper=new UpdateWrapper<>();
  258. updateWrapper.eq("home_page_id", aDeleteFlagVO.getHomePageId())
  259. .eq("hospital_id", aDeleteFlagVO.getHospitalId())
  260. .eq("behospital_code", aDeleteFlagVO.getBehospitalCode())
  261. .eq("is_deleted", IsDeleteEnum.N)
  262. .set("is_deleted",IsDeleteEnum.Y)
  263. .set("gmt_modified", DateUtil.now());
  264. Boolean flag=update(new HomePage(),updateWrapper);
  265. //aMedAbnormalInfoFacade.saveAbnormalInfo("病案首页-删除",JSON.toJSONString(aDeleteFlagVO),JSON.toJSONString(RespDTO.onSuc(flag)),"操作成功!");
  266. return RespDTO.onSuc(flag);
  267. }
  268. }catch (Exception e){
  269. aMedAbnormalInfoFacade.saveAbnormalInfo("病案首页-删除","",JSON.toJSONString(aDeleteFlagVO),"",e.getMessage());
  270. return RespDTO.onError(e.getMessage());
  271. }
  272. }
  273. }