From 6a8c930fdca63077ff192bb8b8bf9a084b3838bc Mon Sep 17 00:00:00 2001 From: linrf Date: Wed, 14 Jun 2023 10:02:01 +0800 Subject: [PATCH] =?UTF-8?q?viewtask=20=E5=B0=81=E8=A3=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../report/view/HospitalServiceImpl.java | 476 ++++++++++++++++++ collect-sdry/src/main/resources/bootstrap.yml | 34 +- collect-sdry/src/main/resources/logback.xml | 2 +- .../basic/http/TBasicHttpCollectJob.java | 2 +- .../basic/view/TBasicViewCollectJob.java | 2 +- .../collect/basic/ws/TBasicWsCollectJob.java | 2 +- .../collect/dept/http/DeptHttpCollectJob.java | 2 +- .../collect/dept/view/DeptViewCollectJob.java | 2 +- .../collect/dept/ws/DeptWsCollectJob.java | 2 +- .../collect/report/view/IHospitalService.java | 16 + .../report/view/LisViewCollectJob.java | 6 +- .../collect/user/http/UserHttpCollectJob.java | 2 +- .../collect/user/view/UserViewCollectJob.java | 2 +- .../collect/user/ws/UserWsCollectJob.java | 2 +- .../collect/web/job/AbstractCollectJob.java | 5 +- .../collect/web/process/JobProcessor.java | 2 +- .../collect/web/service/CollectService.java | 454 ----------------- .../com/docus/server/common/IHospital.java | 54 ++ lis-sysem/pom.xml | 15 - .../docus/server/lis/service/ILisService.java | 54 +- .../lis/service/impl/LisServiceImpl.java | 17 - .../main/resources/mapper/LisDeptMapper.xml | 8 +- 22 files changed, 587 insertions(+), 574 deletions(-) create mode 100644 collect-sdry/src/main/java/com/docus/server/collect/report/view/HospitalServiceImpl.java create mode 100644 common-collect/src/main/java/com/docus/server/collect/report/view/IHospitalService.java create mode 100644 docus-common/src/main/java/com/docus/server/common/IHospital.java diff --git a/collect-sdry/src/main/java/com/docus/server/collect/report/view/HospitalServiceImpl.java b/collect-sdry/src/main/java/com/docus/server/collect/report/view/HospitalServiceImpl.java new file mode 100644 index 0000000..ebbf7ad --- /dev/null +++ b/collect-sdry/src/main/java/com/docus/server/collect/report/view/HospitalServiceImpl.java @@ -0,0 +1,476 @@ +package com.docus.server.collect.report.view; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.serializer.SerializerFeature; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.docus.infrastructure.redis.service.IdService; +import com.docus.server.archivefile.pojo.entity.AfViewCollectionLog; +import com.docus.server.archivefile.service.IAfViewCollectionLogService; +import com.docus.server.collect.web.common.BasicProperties; +import com.docus.server.collect.web.common.DocusProperties; +import com.docus.server.collect.web.common.dto.BasicQueryDto; +import com.docus.server.collect.web.common.dto.CollectionForJZHDto; +import com.docus.server.collect.web.common.dto.CollectionSaveDto; +import com.docus.server.collect.web.enums.ColectNameEnum; +import com.docus.server.collect.web.enums.DisposeModeEnum; +import com.docus.server.collect.web.enums.MedicalRecordEnum; +import com.docus.server.collect.web.enums.RedisKeyEnum; +import com.docus.server.collect.web.utils.MqQueueUtils; +import com.docus.server.collect.web.utils.RedisMq; +import com.docus.server.collect.web.utils.SpringRestTemplateUtils; +import com.docus.server.common.IHospital; +import com.docus.server.common.message.MqMessage; +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.ObjectMapper; +import lombok.extern.slf4j.Slf4j; +import org.springframework.amqp.core.AmqpTemplate; +import org.springframework.core.env.Environment; +import org.springframework.http.MediaType; +import org.springframework.stereotype.Component; +import org.springframework.util.ObjectUtils; +import org.springframework.util.StringUtils; + +import javax.annotation.Resource; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Comparator; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.stream.Collectors; + +@Component +@Slf4j +public class HospitalServiceImpl implements IHospitalService { + private IHospital hospital; + @Resource + private IdService idService; + @Resource + private AmqpTemplate amqpTemplate; + @Resource + private BasicProperties basicProperties; + @Resource + private DocusProperties docusProperties; + @Resource + private MqQueueUtils mqQueueUtils; + @Resource + private Environment environment; + @Resource(name = "defRedis") + private RedisMq redisMq; + @Resource + private IAfViewCollectionLogService afViewCollectionLogService; + + private String jzhkey = "FVISIT_ID"; + private String syscodekey = "SYS_CODE"; + + @Override + public void handle(List> t, String dsKey, IHospital hospital) { + this.hospital = hospital; + handle(t, dsKey); + } + + public void handle(List> datas, String key) { + String mqKey = String.format("topic_task_%s_queue", key); + MqMessage mqMessage = new MqMessage(); + //将key转为大写以免出错 + datas = toReplaceKeyUp(datas); + // 去掉所有String值的前后空格 + toReplaceBlank(datas); + boolean bflage = true; + List> list = new ArrayList<>(); + //包含报告时间并没有jzh数据处理 + if (datas.get(0).containsKey(ColectNameEnum.EXAMTIME.value()) + && ((!datas.get(0).containsKey(ColectNameEnum.JZH.value())) || StringUtils.isEmpty(datas.get(0).get(ColectNameEnum.JZH.value())))) { + //根据住院号取得患者数据,根据报告时间属于哪个出入院时间之间,如无则按最近算 + list = BatchForEXAMTIME(datas); + } else { + //正常数据处理,根据jzh取得患者本次病案采集器全部文件 + list = BatchForJZH(datas); + } + list = GenerateSDPriority(list); + if (list.size() > 0) { + GenerateQueue(mqKey, mqMessage, list); + } + log.info("本次采集:" + datas.size() + "笔" + key); + log.info("本次批采患者数据:" + list.size() + "笔" + key); + log.debug("本次批采患者原始数据:" + JSON.toJSONString(datas)); + log.debug("本次批采患者数据:" + JSON.toJSONString(list)); + datas.clear(); + list.clear(); + } + + private void GenerateQueue(String mqKey, MqMessage mqMessage, List> list) { + log.info("队列生成方式:{},推送 {} 条数据", docusProperties.getMode(), list.size()); + if (docusProperties.getMode().equals(DisposeModeEnum.mq)) { + mqQueueUtils.DeclareQueue(mqKey); + mqMessage.setMessageBody(JSON.toJSONString(list, SerializerFeature.WriteDateUseDateFormat, SerializerFeature.WriteMapNullValue)); + amqpTemplate.convertAndSend("", mqKey, mqMessage); + } + if (docusProperties.getMode().equals(DisposeModeEnum.redis)) { + redisMq.push(RedisKeyEnum.QUEUEREDISKEY, JSON.toJSONString(list, SerializerFeature.WriteDateUseDateFormat, SerializerFeature.WriteMapNullValue)); + } + } + + /** + * 任务优先级 + * + * @param datas + * @return + */ + private List> GenerateSDPriority(List> datas) { + if (!(!StringUtils.isEmpty(docusProperties.getPriority()) && docusProperties.getPriority().equals("1"))) { + return datas; + } + int priority = 1; + SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); + String nowday = sdf.format(new Date()); + String oldDate = ""; + if (datas != null && datas.size() > 0) { + if (datas.get(0).containsKey(ColectNameEnum.ModifyTime.value()) && !ObjectUtils.isEmpty(datas.get(0).get(ColectNameEnum.ModifyTime.value()))) { + if (datas.get(0).get(ColectNameEnum.ModifyTime.value()) instanceof java.util.Date) { + java.util.Date t = (java.util.Date) datas.get(0).get(ColectNameEnum.ModifyTime.value()); + oldDate = sdf.format(t); + } + if (datas.get(0).get(ColectNameEnum.ModifyTime.value()) instanceof java.sql.Date) { + java.sql.Date t = (java.sql.Date) datas.get(0).get(ColectNameEnum.ModifyTime.value()); + oldDate = sdf.format(t); + } + if (datas.get(0).get(ColectNameEnum.ModifyTime.value()) instanceof String) { + oldDate = String.valueOf(datas.get(0).get(ColectNameEnum.ModifyTime.value())).replace("-", "").substring(0, 8); + } + } + if (oldDate.substring(0, 6).equals("202208")) { + priority = 2; + } + if (oldDate.equals(nowday)) { + priority = 3; + } + } + for (Map o : datas) { + o.put(ColectNameEnum.priority.value(), priority); + } + + return datas; + } + + /** + * 根据jzh取得所需采集的批量数据 + * + * @param datas + */ + private List> BatchForJZH(List> datas) { + String oldJzhkey = ""; + String syscode = String.valueOf(datas.get(0).get(syscodekey)); + List jzhs = datas.stream().map(t -> String.valueOf(t.get(jzhkey))).distinct().collect(Collectors.toList()); + BasicQueryDto dto = new BasicQueryDto(); + //没用 +// FieldJsonDto fieldJsonDto = dto.getFields().stream().filter(t -> t.getNewfield().equals(jzhkey)).findFirst().orElse(null); +// if (fieldJsonDto != null) { +// oldJzhkey = fieldJsonDto.getOldfield(); +// } + + if (datas.get(0).containsKey(ColectNameEnum.MedicalRecord.value())) { + String MedicalRecord = String.valueOf(datas.get(0).get(ColectNameEnum.MedicalRecord.value())); + if (MedicalRecord.equals(MedicalRecordEnum.jzhAndTimes.value())) { + return GetColectionForJZHAndAdmissTimes(dto, oldJzhkey, syscode, jzhs, datas); + } + if (MedicalRecord.equals(MedicalRecordEnum.zyhAndTimes.value())) { + jzhs = datas.stream().map(t -> String.valueOf(t.get(ColectNameEnum.ZYH.value())).trim() + "_" + String.valueOf(t.get(ColectNameEnum.AdmissTimes.value())).trim()).distinct().collect(Collectors.toList()); + return GetColectionForZYHAndAdmissTimes(dto, oldJzhkey, syscode, jzhs, datas); + } + } + return GetColectionForJZH(dto, oldJzhkey, syscode, jzhs); + } + + private List> GetColectionForJZHAndAdmissTimes(BasicQueryDto dto, String oldJzhkey, String syscode, List jzhs, List> datas) { + List> batchcollects = hospital.BatchForJZHAndAdmissTimes(datas); + toReplaceBlank(batchcollects); + return GetColectionForJZH(syscode, jzhs, batchcollects); + } + + private List> GetColectionForZYHAndAdmissTimes(BasicQueryDto dto, String oldJzhkey, String syscode, List jzhs, List> datas) { + List> batchcollects = hospital.BatchForZYHAndAdmissTimes(datas); + toReplaceBlank(batchcollects); + return GetColectionForJZH(syscode, jzhs, batchcollects); + } + + /** + * 取得历史采集数据 + * + * @param jzhs + * @param syscode + * @return + */ + private List getOldConllectionLog(List jzhs, String syscode) { + CollectionForJZHDto jzhDto = new CollectionForJZHDto(); + jzhDto.setJzhs(jzhs); + jzhDto.setSyscode(syscode); + String url = String.format("http://localhost:%s", getPort()); + String requstParam = JSON.toJSONString(jzhDto); + String sendPost = SpringRestTemplateUtils.getInstance().sendPost(url + "/api/conllection/logs", requstParam, MediaType.APPLICATION_JSON, null, true); + ObjectMapper objectMapper = new ObjectMapper(); + List datas = new ArrayList<>(); + try { + datas = objectMapper.readValue(sendPost, new TypeReference>() { + }); + } catch (Exception ex) { + log.error("解析失败:" + sendPost); + return null; + } + return datas; + } + + private List> GetColectionForJZH(String syscode, List jzhs, List> batchcollects) { + //转为大写 + batchcollects = toReplaceKeyUp(batchcollects); + batchcollects = batchcollects.stream().distinct().collect(Collectors.toList()); + log.debug("JZH 处理后的数据 {} 条", batchcollects.size()); + Boolean recordlog = false; + if (batchcollects != null && batchcollects.size() > 0) { + if (batchcollects.get(0).containsKey(ColectNameEnum.RecordLog.value())) { + recordlog = true; + } + } + log.debug("recordlog:{}", recordlog); + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(); + queryWrapper.in(AfViewCollectionLog::getJzh, jzhs).eq(AfViewCollectionLog::getSysCode, syscode); + List oldcollects = afViewCollectionLogService.find(queryWrapper); +// List oldcollects = getOldConllectionLog(jzhs, syscode); + List> newcollects = new ArrayList<>(); + List updates = new ArrayList<>(); + List adds = new ArrayList<>(); + for (Map o : batchcollects) { + String fileid = String.valueOf(o.get(ColectNameEnum.FILEID.value())).trim(); + String jzhdata = String.valueOf(o.get(jzhkey)); + String MedicalRecord = String.valueOf(o.get(ColectNameEnum.MedicalRecord.value())); + if (MedicalRecord.equals(MedicalRecordEnum.zyhAndTimes.value())) { + jzhdata = String.valueOf(o.get(ColectNameEnum.ZYH.value())).trim() + "_" + String.valueOf(o.get(ColectNameEnum.AdmissTimes.value())).trim(); + } + String jzh = jzhdata; + String modifytime = String.valueOf(o.get(ColectNameEnum.ModifyTime.value())); + AfViewCollectionLog collectionLog = oldcollects.stream().filter(t -> t.getFileId().equals(fileid) && t.getJzh().equals(jzh)).findFirst().orElse(null); + log.debug("fileId {} AfViewCollectionLog is null? {}", fileid, collectionLog == null); + if (null == collectionLog) { + //电子病历,记录是否更新,合并时只给已更新的 + if (recordlog) { + o.put(ColectNameEnum.nowdata.value(), 1); + } + newcollects.add(o); + log.debug("collectionLog is null"); + AfViewCollectionLog logadd = new AfViewCollectionLog(); + logadd.setFileId(fileid); + logadd.setCreateTime(new Date()); + logadd.setFileModifyTime(modifytime); + logadd.setJzh(jzh); + logadd.setSysCode(syscode); + logadd.setId(idService.getDateSeq()); + adds.add(logadd); + continue; + } + if (!collectionLog.getFileModifyTime().equals(modifytime)) { + log.debug("collectionLog FileModifyTime is not eq view FileModifyTime"); + if (recordlog) { + o.put(ColectNameEnum.nowdata.value(), 1); + } + newcollects.add(o); + collectionLog.setFileModifyTime(modifytime); + updates.add(collectionLog); + continue; + } + if (recordlog) { + o.put(ColectNameEnum.nowdata.value(), 1); + newcollects.add(o); + } + } + + afViewCollectionLogService.saveOrUpdateBatch(adds); + afViewCollectionLogService.saveOrUpdateBatch(updates); + + return newcollects; + } + + private void SaveConllectionLog(List adds, List updates) { + + CollectionSaveDto dto = new CollectionSaveDto(); + + dto.setAdds(adds); + dto.setUpdates(updates); + String url = String.format("http://localhost:%s", getPort()); + String requstParam = JSON.toJSONString(dto); + SpringRestTemplateUtils.getInstance().sendPost(url + "/api/conllection/SaveLogs", requstParam, MediaType.APPLICATION_JSON, null, true); + } + + /** + * 把map key改为大写 + * + * @param maps + * @return + */ + private static List> toReplaceKeyUp(List> maps) { + List> data = new ArrayList<>(); + for (Map o : maps) { + Map re_map = new HashMap(); + for (Map.Entry entry : o.entrySet()) { + re_map.put(entry.getKey().trim().toUpperCase(), entry.getValue()); + } + data.add(re_map); + } + + return data; + } + + /** + * 替换掉map中的String值的前后空格 + * + * @param datas 数据 + */ + private static void toReplaceBlank(List> datas) { + if (datas == null || datas.isEmpty()) { + return; + } + for (Map data : datas) { + Set> entries = data.entrySet(); + for (Map.Entry entry : entries) { + Object value = entry.getValue(); + if (value instanceof String) { + entry.setValue(String.valueOf(value).trim()); + } + } + } + } + + private List> BatchForEXAMTIME(List> datas) { + String oldJzhkey = ""; + String syscode = String.valueOf(datas.get(0).get(ColectNameEnum.COLLECTID.value())); + List zyhs = datas.stream().map(t -> String.valueOf(t.get(ColectNameEnum.ZYH.value()))).distinct().collect(Collectors.toList()); + List> basics = getBasicForZYHs(zyhs); + if (null == basics || basics.size() <= 0) { + return new ArrayList<>(); + } + List> list = new ArrayList<>(); + for (Map o : datas) { + + List> temps = basics.stream().filter(t -> String.valueOf(t.get(ColectNameEnum.InpatientNo.value())).equals( + String.valueOf(o.get(ColectNameEnum.ZYH.value()))) + ).collect(Collectors.toList()); + + if (null == temps || temps.size() <= 0) { + continue; + } + String examTime = String.valueOf(o.get(ColectNameEnum.EXAMTIME.value())); + //region 取得出入院区间是否有数据 + Map temp = temps.stream().filter(t -> + { + String AdmissDate = String.valueOf(t.get(ColectNameEnum.AdmissDate.value())); + String DisDate = String.valueOf(t.get(ColectNameEnum.DisDate.value())); + if (examTime.compareTo(AdmissDate) >= 0 && examTime.compareTo(DisDate) <= 0) { + return true; + } + return false; + } + ).findFirst().orElse(null); + if (temp != null) { + o.put(ColectNameEnum.JZH.value(), temp.get("jzh")); + o.put(ColectNameEnum.AdmissDate.value(), temp.get(ColectNameEnum.AdmissDate.value())); + o.put(ColectNameEnum.DisDate.value(), temp.get(ColectNameEnum.DisDate.value())); + list.add(o); + continue; + } + //endregion + //region 取得大于入院日期的第一笔 + temp = temps.stream().filter(t -> + { + String AdmissDate = String.valueOf(t.get(ColectNameEnum.AdmissDate.value())); + String DisDate = String.valueOf(t.get(ColectNameEnum.DisDate.value())); + if (examTime.compareTo(AdmissDate) >= 0 && examTime.compareTo(DisDate) >= 0) { + return true; + } + return false; + } + ).sorted(Comparator.comparing(a -> String.valueOf(a.get(ColectNameEnum.AdmissDate.value())), Comparator.reverseOrder())).findFirst().orElse(null); + if (temp != null) { + o.put(ColectNameEnum.JZH.value(), temp.get("jzh")); + o.put(ColectNameEnum.AdmissDate.value(), temp.get(ColectNameEnum.AdmissDate.value())); + o.put(ColectNameEnum.DisDate.value(), examTime); + list.add(o); + continue; + } + //endregion + //region 取得最近一笔住院的 + temp = temps.stream().sorted(Comparator.comparing(a -> String.valueOf(a.get(ColectNameEnum.AdmissDate.value())), Comparator.reverseOrder())).findFirst().orElse(null); + if (temp != null) { + o.put(ColectNameEnum.JZH.value(), temp.get("jzh")); + o.put(ColectNameEnum.AdmissDate.value(), temp.get(ColectNameEnum.AdmissDate.value())); + o.put(ColectNameEnum.DisDate.value(), temp.get(ColectNameEnum.DisDate.value())); + list.add(o); + continue; + } + //endregion + + } + + //取得该患者全部住院文件 + List> batchcollects = hospital.BatchForEXAMTIME(list); + toReplaceBlank(batchcollects); + //添加记帐号 + for (Map k : batchcollects) { + Map temp = list.stream().filter(t -> String.valueOf(t.get(ColectNameEnum.ZYH.value())).equals( + String.valueOf(k.get(ColectNameEnum.ZYH.value()))) + ).findFirst().orElse(null); + k.put(ColectNameEnum.JZH.value(), temp.get(ColectNameEnum.JZH.value())); + } + list.forEach(t -> + { + t.remove(ColectNameEnum.AdmissDate.value()); + t.remove(ColectNameEnum.DisDate.value()); + } + ); + batchcollects.removeAll(list); + batchcollects.addAll(list); + List jzhs = list.stream().map(t -> String.valueOf(t.get(ColectNameEnum.JZH.value()))).collect(Collectors.toList()); + return GetColectionForJZH(syscode, jzhs, batchcollects); + } + + private List> GetColectionForJZH(BasicQueryDto dto, String oldJzhkey, String syscode, List jzhs) { + jzhs = jzhs.stream().distinct().collect(Collectors.toList()); + List> batchcollects = hospital.BatchForJZH(jzhs); + log.debug("size:{}", batchcollects.size()); + toReplaceBlank(batchcollects); + return GetColectionForJZH(syscode, jzhs, batchcollects); + } + + /** + * 根据住院号取得住院数据 + * + * @param zyhs + * @return + */ + private List> getBasicForZYHs(List zyhs) { + List> datas = new ArrayList<>(); + String url = String.format("http://localhost:%s", getPort()); + String requstParam = JSON.toJSONString(zyhs); + String sendPost = SpringRestTemplateUtils.getInstance().sendPost(url + "/api/conllection/getBasicForZYHs", requstParam, MediaType.APPLICATION_JSON, null, true); + ObjectMapper objectMapper = new ObjectMapper(); + try { + datas = objectMapper.readValue(sendPost, new TypeReference>>() { + }); + } catch (Exception ex) { + log.error("解析失败:" + sendPost); + return null; + } + + return datas; + } + + /** + * 取得本机端口 + * + * @return + */ + private String getPort() { + return environment.getProperty("local.server.port"); + } +} diff --git a/collect-sdry/src/main/resources/bootstrap.yml b/collect-sdry/src/main/resources/bootstrap.yml index ddbeaef..8dc13b0 100644 --- a/collect-sdry/src/main/resources/bootstrap.yml +++ b/collect-sdry/src/main/resources/bootstrap.yml @@ -13,92 +13,92 @@ spring: #公司病案的文件服务数据库 master: url: jdbc:log4jdbc:mysql://db.docus.cn:3306/docus_archivefile?autoReconnect=true&allowMultiQueries=true&useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai - username: root - password: root + username: docus + password: docus702 driver-class-name: net.sf.log4jdbc.sql.jdbcapi.DriverSpy type: com.alibaba.druid.pool.DruidDataSource #公司病案的系统服务数据库 system: url: jdbc:log4jdbc:mysql://db.docus.cn:3306/docus_system?autoReconnect=true&allowMultiQueries=true&useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai - username: root - password: root + username: docus + password: docus702 driver-class-name: net.sf.log4jdbc.sql.jdbcapi.DriverSpy type: com.alibaba.druid.pool.DruidDataSource #公司病案的基础服务数据库 record: url: jdbc:log4jdbc:mysql://db.docus.cn:3306/docus_medicalrecord?autoReconnect=true&allowMultiQueries=true&useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai - username: root - password: root + username: docus + password: docus702 driver-class-name: net.sf.log4jdbc.sql.jdbcapi.DriverSpy type: com.alibaba.druid.pool.DruidDataSource #医院的用户/科室/基础数据的数据库 his: url: jdbc:log4jdbc:mysql://127.0.0.1:3306/his?autoReconnect=true&allowMultiQueries=true&useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai username: root - password: root + password: root@123456 driver-class-name: net.sf.log4jdbc.sql.jdbcapi.DriverSpy type: com.alibaba.druid.pool.DruidDataSource #病理数据 bl: url: jdbc:log4jdbc:mysql://127.0.0.1:3306/his?autoReconnect=true&allowMultiQueries=true&useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai username: root - password: root + password: root@123456 driver-class-name: net.sf.log4jdbc.sql.jdbcapi.DriverSpy type: com.alibaba.druid.pool.DruidDataSource #电生理系统数据 ecg: url: jdbc:log4jdbc:mysql://127.0.0.1:3306/his?autoReconnect=true&allowMultiQueries=true&useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai username: root - password: root + password: root@123456 driver-class-name: net.sf.log4jdbc.sql.jdbcapi.DriverSpy type: com.alibaba.druid.pool.DruidDataSource #电子病历系统数据 emr: url: jdbc:log4jdbc:mysql://127.0.0.1:3306/his?autoReconnect=true&allowMultiQueries=true&useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai username: root - password: root + password: root@123456 driver-class-name: net.sf.log4jdbc.sql.jdbcapi.DriverSpy type: com.alibaba.druid.pool.DruidDataSource #护理文书系统数据 hl: url: jdbc:log4jdbc:mysql://127.0.0.1:3306/his?autoReconnect=true&allowMultiQueries=true&useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai username: root - password: root + password: root@123456 driver-class-name: net.sf.log4jdbc.sql.jdbcapi.DriverSpy type: com.alibaba.druid.pool.DruidDataSource #手麻系统数据 issubmit: url: jdbc:log4jdbc:mysql://127.0.0.1:3306/his?autoReconnect=true&allowMultiQueries=true&useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai username: root - password: root + password: root@123456 driver-class-name: net.sf.log4jdbc.sql.jdbcapi.DriverSpy type: com.alibaba.druid.pool.DruidDataSource #lis系统数据 lis: url: jdbc:log4jdbc:mysql://127.0.0.1:3306/lis?autoReconnect=true&allowMultiQueries=true&useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai username: root - password: root + password: root@123456 driver-class-name: net.sf.log4jdbc.sql.jdbcapi.DriverSpy type: com.alibaba.druid.pool.DruidDataSource #Pacs系统数据视图 pacs: url: jdbc:log4jdbc:mysql://127.0.0.1:3306/his?autoReconnect=true&allowMultiQueries=true&useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai username: root - password: root + password: root@123456 driver-class-name: net.sf.log4jdbc.sql.jdbcapi.DriverSpy type: com.alibaba.druid.pool.DruidDataSource #vte静脉血栓栓塞症 vte: url: jdbc:log4jdbc:mysql://127.0.0.1:3306/his?autoReconnect=true&allowMultiQueries=true&useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai username: root - password: root + password: root@123456 driver-class-name: net.sf.log4jdbc.sql.jdbcapi.DriverSpy type: com.alibaba.druid.pool.DruidDataSource #重症系统数据 zz: url: jdbc:log4jdbc:mysql://127.0.0.1:3306/his?autoReconnect=true&allowMultiQueries=true&useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai username: root - password: root + password: root@123456 driver-class-name: net.sf.log4jdbc.sql.jdbcapi.DriverSpy type: com.alibaba.druid.pool.DruidDataSource # rabbitmq: @@ -108,7 +108,7 @@ spring: # password: guest redis: host: redis.docus.cn - # password: JSdocus@702 + password: JSdocus@702 cloud: nacos: discovery: diff --git a/collect-sdry/src/main/resources/logback.xml b/collect-sdry/src/main/resources/logback.xml index 5edc7af..23dc795 100644 --- a/collect-sdry/src/main/resources/logback.xml +++ b/collect-sdry/src/main/resources/logback.xml @@ -49,7 +49,7 @@ - + diff --git a/common-collect/src/main/java/com/docus/server/collect/basic/http/TBasicHttpCollectJob.java b/common-collect/src/main/java/com/docus/server/collect/basic/http/TBasicHttpCollectJob.java index c060409..944a408 100644 --- a/common-collect/src/main/java/com/docus/server/collect/basic/http/TBasicHttpCollectJob.java +++ b/common-collect/src/main/java/com/docus/server/collect/basic/http/TBasicHttpCollectJob.java @@ -42,7 +42,7 @@ public class TBasicHttpCollectJob extends AbstractCollectJob { @Override - public void batchInsertOrUpdate(List t) { + public void doHandle(List t) { basicService.batchSaveBasics(t); } diff --git a/common-collect/src/main/java/com/docus/server/collect/basic/view/TBasicViewCollectJob.java b/common-collect/src/main/java/com/docus/server/collect/basic/view/TBasicViewCollectJob.java index 0358b29..89a489c 100644 --- a/common-collect/src/main/java/com/docus/server/collect/basic/view/TBasicViewCollectJob.java +++ b/common-collect/src/main/java/com/docus/server/collect/basic/view/TBasicViewCollectJob.java @@ -40,7 +40,7 @@ public class TBasicViewCollectJob extends AbstractCollectJob { } @Override - public void batchInsertOrUpdate(List t) { + public void doHandle(List t) { basicService.batchSaveBasics(t); } diff --git a/common-collect/src/main/java/com/docus/server/collect/basic/ws/TBasicWsCollectJob.java b/common-collect/src/main/java/com/docus/server/collect/basic/ws/TBasicWsCollectJob.java index dae6db5..65b91ec 100644 --- a/common-collect/src/main/java/com/docus/server/collect/basic/ws/TBasicWsCollectJob.java +++ b/common-collect/src/main/java/com/docus/server/collect/basic/ws/TBasicWsCollectJob.java @@ -40,7 +40,7 @@ public class TBasicWsCollectJob extends AbstractCollectJob { } @Override - public void batchInsertOrUpdate(List t) { + public void doHandle(List t) { basicService.batchSaveBasics(t); } diff --git a/common-collect/src/main/java/com/docus/server/collect/dept/http/DeptHttpCollectJob.java b/common-collect/src/main/java/com/docus/server/collect/dept/http/DeptHttpCollectJob.java index 4598196..886b7de 100644 --- a/common-collect/src/main/java/com/docus/server/collect/dept/http/DeptHttpCollectJob.java +++ b/common-collect/src/main/java/com/docus/server/collect/dept/http/DeptHttpCollectJob.java @@ -41,7 +41,7 @@ public class DeptHttpCollectJob extends AbstractCollectJob { } @Override - public void batchInsertOrUpdate(List t) { + public void doHandle(List t) { deptService.batchInsertOrUpdatePowerDept(t); } diff --git a/common-collect/src/main/java/com/docus/server/collect/dept/view/DeptViewCollectJob.java b/common-collect/src/main/java/com/docus/server/collect/dept/view/DeptViewCollectJob.java index b1368e1..90958e2 100644 --- a/common-collect/src/main/java/com/docus/server/collect/dept/view/DeptViewCollectJob.java +++ b/common-collect/src/main/java/com/docus/server/collect/dept/view/DeptViewCollectJob.java @@ -42,7 +42,7 @@ public class DeptViewCollectJob extends AbstractCollectJob { } @Override - public void batchInsertOrUpdate(List t) { + public void doHandle(List t) { deptService.batchInsertOrUpdatePowerDept(t); } diff --git a/common-collect/src/main/java/com/docus/server/collect/dept/ws/DeptWsCollectJob.java b/common-collect/src/main/java/com/docus/server/collect/dept/ws/DeptWsCollectJob.java index ed5a1be..b0ceed4 100644 --- a/common-collect/src/main/java/com/docus/server/collect/dept/ws/DeptWsCollectJob.java +++ b/common-collect/src/main/java/com/docus/server/collect/dept/ws/DeptWsCollectJob.java @@ -40,7 +40,7 @@ public class DeptWsCollectJob extends AbstractCollectJob { } @Override - public void batchInsertOrUpdate(List t) { + public void doHandle(List t) { deptService.batchInsertOrUpdatePowerDept(t); } diff --git a/common-collect/src/main/java/com/docus/server/collect/report/view/IHospitalService.java b/common-collect/src/main/java/com/docus/server/collect/report/view/IHospitalService.java new file mode 100644 index 0000000..0643c3c --- /dev/null +++ b/common-collect/src/main/java/com/docus/server/collect/report/view/IHospitalService.java @@ -0,0 +1,16 @@ +package com.docus.server.collect.report.view; + +import com.docus.server.common.IHospital; + +import java.util.List; +import java.util.Map; + +/** + * @author linruifeng + * @date 2023/6/14 9:38 + */ +public interface IHospitalService { + + void handle(List> t, String dsKey, IHospital hospital); + +} diff --git a/common-collect/src/main/java/com/docus/server/collect/report/view/LisViewCollectJob.java b/common-collect/src/main/java/com/docus/server/collect/report/view/LisViewCollectJob.java index b5e8b50..3c3e1e0 100644 --- a/common-collect/src/main/java/com/docus/server/collect/report/view/LisViewCollectJob.java +++ b/common-collect/src/main/java/com/docus/server/collect/report/view/LisViewCollectJob.java @@ -25,6 +25,8 @@ import java.util.Map; public class LisViewCollectJob extends AbstractCollectJob> { @Resource private ILisService lisService; + @Resource + private IHospitalService hospitalService; /** * xxl jobhandler 手工执行,全量执行 @@ -43,8 +45,8 @@ public class LisViewCollectJob extends AbstractCollectJob> { } @Override - public void batchInsertOrUpdate(List> t) { - collectService.handle(t, DSKeyConstants.DS_KEY); + public void doHandle(List> t) { + hospitalService.handle(t, DSKeyConstants.DS_KEY, lisService); } @SuppressWarnings("unchecked") diff --git a/common-collect/src/main/java/com/docus/server/collect/user/http/UserHttpCollectJob.java b/common-collect/src/main/java/com/docus/server/collect/user/http/UserHttpCollectJob.java index c8342fb..f31d198 100644 --- a/common-collect/src/main/java/com/docus/server/collect/user/http/UserHttpCollectJob.java +++ b/common-collect/src/main/java/com/docus/server/collect/user/http/UserHttpCollectJob.java @@ -40,7 +40,7 @@ public class UserHttpCollectJob extends AbstractCollectJob { } @Override - public void batchInsertOrUpdate(List t) { + public void doHandle(List t) { userService.batchInsertOrUpdatePowerUser(t); } diff --git a/common-collect/src/main/java/com/docus/server/collect/user/view/UserViewCollectJob.java b/common-collect/src/main/java/com/docus/server/collect/user/view/UserViewCollectJob.java index 5e552cc..fa4172e 100644 --- a/common-collect/src/main/java/com/docus/server/collect/user/view/UserViewCollectJob.java +++ b/common-collect/src/main/java/com/docus/server/collect/user/view/UserViewCollectJob.java @@ -48,7 +48,7 @@ public class UserViewCollectJob extends AbstractCollectJob { } @Override - public void batchInsertOrUpdate(List t) { + public void doHandle(List t) { //docus-BasicDataReceive同步user逻辑 Collection userNames = ListUtils.distinctSelect(t, UserDTO::getUserName); List powerUsers = userService.findByList("userName", userNames); diff --git a/common-collect/src/main/java/com/docus/server/collect/user/ws/UserWsCollectJob.java b/common-collect/src/main/java/com/docus/server/collect/user/ws/UserWsCollectJob.java index 5c453f0..72f2f48 100644 --- a/common-collect/src/main/java/com/docus/server/collect/user/ws/UserWsCollectJob.java +++ b/common-collect/src/main/java/com/docus/server/collect/user/ws/UserWsCollectJob.java @@ -40,7 +40,7 @@ public class UserWsCollectJob extends AbstractCollectJob { } @Override - public void batchInsertOrUpdate(List t) { + public void doHandle(List t) { userService.batchInsertOrUpdatePowerUser(t); } diff --git a/common-collect/src/main/java/com/docus/server/collect/web/job/AbstractCollectJob.java b/common-collect/src/main/java/com/docus/server/collect/web/job/AbstractCollectJob.java index 05a8e50..10b923a 100644 --- a/common-collect/src/main/java/com/docus/server/collect/web/job/AbstractCollectJob.java +++ b/common-collect/src/main/java/com/docus/server/collect/web/job/AbstractCollectJob.java @@ -94,13 +94,14 @@ public abstract class AbstractCollectJob implements IJob { pageNum, taskConfig.getPageSize() ); + if (Func.isEmpty(t)) { log.info("本次采集:0笔" + taskConfig.getType()); break; } log.info("本次采集:" + t.size() + "笔" + taskConfig.getType()); - this.batchInsertOrUpdate(t); + this.doHandle(t); } } @@ -123,7 +124,7 @@ public abstract class AbstractCollectJob implements IJob { return XxlJobHelper.getJobParam(); } - public abstract void batchInsertOrUpdate(List t); + public abstract void doHandle(List t); public abstract List execute(Date startDate, Date endDate, int pageNum, int pageSize); } diff --git a/common-collect/src/main/java/com/docus/server/collect/web/process/JobProcessor.java b/common-collect/src/main/java/com/docus/server/collect/web/process/JobProcessor.java index c93911f..1c77e22 100644 --- a/common-collect/src/main/java/com/docus/server/collect/web/process/JobProcessor.java +++ b/common-collect/src/main/java/com/docus/server/collect/web/process/JobProcessor.java @@ -38,7 +38,7 @@ public class JobProcessor extends AbstractProcessor { if (Func.isEmpty(message)) { throw new RuntimeException("参数为空"); } -// String jsonStr = JSON.toJSON(converter.convert(message, context.getGroup())); +// String jsonStr = JSON.toJSON(converter.handle(message, context.getGroup())); Long taskId = messageService.insertTaskOriginalMessage("", message, IIntegerEnum.fromDisplay(CollectTypeEnum.class, context.getGroup())); Map params = context.getParams(); params.put("taskId", taskId); diff --git a/common-collect/src/main/java/com/docus/server/collect/web/service/CollectService.java b/common-collect/src/main/java/com/docus/server/collect/web/service/CollectService.java index 9cfa42c..8d5ec49 100644 --- a/common-collect/src/main/java/com/docus/server/collect/web/service/CollectService.java +++ b/common-collect/src/main/java/com/docus/server/collect/web/service/CollectService.java @@ -1,49 +1,17 @@ package com.docus.server.collect.web.service; -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.serializer.SerializerFeature; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.docus.core.util.Func; -import com.docus.infrastructure.redis.service.IdService; -import com.docus.server.archivefile.pojo.entity.AfViewCollectionLog; -import com.docus.server.archivefile.service.IAfViewCollectionLogService; -import com.docus.server.collect.web.common.BasicProperties; -import com.docus.server.collect.web.common.DocusProperties; -import com.docus.server.collect.web.common.dto.BasicQueryDto; -import com.docus.server.collect.web.common.dto.CollectionForJZHDto; -import com.docus.server.collect.web.common.dto.CollectionSaveDto; -import com.docus.server.collect.web.enums.ColectNameEnum; -import com.docus.server.collect.web.enums.DisposeModeEnum; -import com.docus.server.collect.web.enums.MedicalRecordEnum; -import com.docus.server.collect.web.enums.RedisKeyEnum; -import com.docus.server.collect.web.utils.MqQueueUtils; -import com.docus.server.collect.web.utils.RedisMq; -import com.docus.server.collect.web.utils.SpringRestTemplateUtils; -import com.docus.server.common.message.MqMessage; -import com.docus.server.lis.service.ILisService; import com.docus.server.record.common.pojo.dto.TBasicDTO; import com.docus.server.record.service.ITBasicService; import com.docus.server.sys.common.pojo.dto.DeptDTO; import com.docus.server.sys.common.pojo.dto.UserDTO; import com.docus.server.sys.service.IPowerDeptService; import com.docus.server.sys.service.IPowerUserService; -import com.fasterxml.jackson.core.type.TypeReference; -import com.fasterxml.jackson.databind.ObjectMapper; import lombok.extern.slf4j.Slf4j; -import org.springframework.amqp.core.AmqpTemplate; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.core.env.Environment; -import org.springframework.http.MediaType; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import org.springframework.util.ObjectUtils; -import org.springframework.util.StringUtils; import javax.annotation.Resource; -import java.text.SimpleDateFormat; -import java.util.*; -import java.util.stream.Collectors; @Service @Slf4j @@ -55,26 +23,6 @@ public class CollectService { private IPowerUserService userService; @Resource private ITBasicService tBasicService; - @Resource - private IdService idService; - @Autowired - private AmqpTemplate amqpTemplate; - @Resource - private BasicProperties basicProperties; - @Resource - private DocusProperties docusProperties; - @Resource - MqQueueUtils mqQueueUtils; - @Resource - private ILisService lisService; - @Resource - private Environment environment; - @Resource(name = "defRedis") - private RedisMq redisMq; - @Resource - private IAfViewCollectionLogService afViewCollectionLogService; - private String jzhkey = "FVISIT_ID"; - private String syscodekey = "SYS_CODE"; /** * 默认3次重试 @@ -127,406 +75,4 @@ public class CollectService { return Func.isNotEmpty(operateType) && operateType.contains(delType); } - - public void handle(List> datas, String key) { - String mqKey = String.format("topic_task_%s_queue", key); - MqMessage mqMessage = new MqMessage(); - //将key转为大写以免出错 - datas = toReplaceKeyUp(datas); - // 去掉所有String值的前后空格 - toReplaceBlank(datas); - boolean bflage = true; - List> list = new ArrayList<>(); - //包含报告时间并没有jzh数据处理 - if (datas.get(0).containsKey(ColectNameEnum.EXAMTIME.value()) - && ((!datas.get(0).containsKey(ColectNameEnum.JZH.value())) || StringUtils.isEmpty(datas.get(0).get(ColectNameEnum.JZH.value())))) { - //根据住院号取得患者数据,根据报告时间属于哪个出入院时间之间,如无则按最近算 - list = BatchForEXAMTIME(datas); - } else { - //正常数据处理,根据jzh取得患者本次病案采集器全部文件 - list = BatchForJZH(datas); - } - list = GenerateSDPriority(list); - if (list.size() > 0) { - GenerateQueue(mqKey, mqMessage, list); - } - log.info("本次采集:" + datas.size() + "笔" + key); - log.info("本次批采患者数据:" + list.size() + "笔" + key); - log.debug("本次批采患者原始数据:" + JSON.toJSONString(datas)); - log.debug("本次批采患者数据:" + JSON.toJSONString(list)); - datas.clear(); - list.clear(); - } - - private void GenerateQueue(String mqKey, MqMessage mqMessage, List> list) { - log.info("队列生成方式:{},推送 {} 条数据", docusProperties.getMode(), list.size()); - if (docusProperties.getMode().equals(DisposeModeEnum.mq)) { - mqQueueUtils.DeclareQueue(mqKey); - mqMessage.setMessageBody(JSON.toJSONString(list, SerializerFeature.WriteDateUseDateFormat, SerializerFeature.WriteMapNullValue)); - amqpTemplate.convertAndSend("", mqKey, mqMessage); - } - if (docusProperties.getMode().equals(DisposeModeEnum.redis)) { - redisMq.push(RedisKeyEnum.QUEUEREDISKEY, JSON.toJSONString(list, SerializerFeature.WriteDateUseDateFormat, SerializerFeature.WriteMapNullValue)); - } - } - - /** - * 任务优先级 - * - * @param datas - * @return - */ - private List> GenerateSDPriority(List> datas) { - if (!(!StringUtils.isEmpty(docusProperties.getPriority()) && docusProperties.getPriority().equals("1"))) { - return datas; - } - int priority = 1; - SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); - String nowday = sdf.format(new Date()); - String oldDate = ""; - if (datas != null && datas.size() > 0) { - if (datas.get(0).containsKey(ColectNameEnum.ModifyTime.value()) && !ObjectUtils.isEmpty(datas.get(0).get(ColectNameEnum.ModifyTime.value()))) { - if (datas.get(0).get(ColectNameEnum.ModifyTime.value()) instanceof java.util.Date) { - java.util.Date t = (java.util.Date) datas.get(0).get(ColectNameEnum.ModifyTime.value()); - oldDate = sdf.format(t); - } - if (datas.get(0).get(ColectNameEnum.ModifyTime.value()) instanceof java.sql.Date) { - java.sql.Date t = (java.sql.Date) datas.get(0).get(ColectNameEnum.ModifyTime.value()); - oldDate = sdf.format(t); - } - if (datas.get(0).get(ColectNameEnum.ModifyTime.value()) instanceof String) { - oldDate = String.valueOf(datas.get(0).get(ColectNameEnum.ModifyTime.value())).replace("-", "").substring(0, 8); - } - } - if (oldDate.substring(0, 6).equals("202208")) { - priority = 2; - } - if (oldDate.equals(nowday)) { - priority = 3; - } - } - for (Map o : datas) { - o.put(ColectNameEnum.priority.value(), priority); - } - - return datas; - } - - /** - * 根据jzh取得所需采集的批量数据 - * - * @param datas - */ - private List> BatchForJZH(List> datas) { - String oldJzhkey = ""; - String syscode = String.valueOf(datas.get(0).get(syscodekey)); - List jzhs = datas.stream().map(t -> String.valueOf(t.get(jzhkey))).distinct().collect(Collectors.toList()); - BasicQueryDto dto = new BasicQueryDto(); - //没用 -// FieldJsonDto fieldJsonDto = dto.getFields().stream().filter(t -> t.getNewfield().equals(jzhkey)).findFirst().orElse(null); -// if (fieldJsonDto != null) { -// oldJzhkey = fieldJsonDto.getOldfield(); -// } - - if (datas.get(0).containsKey(ColectNameEnum.MedicalRecord.value())) { - String MedicalRecord = String.valueOf(datas.get(0).get(ColectNameEnum.MedicalRecord.value())); - if (MedicalRecord.equals(MedicalRecordEnum.jzhAndTimes.value())) { - return GetColectionForJZHAndAdmissTimes(dto, oldJzhkey, syscode, jzhs, datas); - } - if (MedicalRecord.equals(MedicalRecordEnum.zyhAndTimes.value())) { - jzhs = datas.stream().map(t -> String.valueOf(t.get(ColectNameEnum.ZYH.value())).trim() + "_" + String.valueOf(t.get(ColectNameEnum.AdmissTimes.value())).trim()).distinct().collect(Collectors.toList()); - return GetColectionForZYHAndAdmissTimes(dto, oldJzhkey, syscode, jzhs, datas); - } - } - return GetColectionForJZH(dto, oldJzhkey, syscode, jzhs); - } - - private List> GetColectionForJZHAndAdmissTimes(BasicQueryDto dto, String oldJzhkey, String syscode, List jzhs, List> datas) { - List> batchcollects = lisService.BatchForJZHAndAdmissTimes(datas); - toReplaceBlank(batchcollects); - return GetColectionForJZH(syscode, jzhs, batchcollects); - } - - private List> GetColectionForZYHAndAdmissTimes(BasicQueryDto dto, String oldJzhkey, String syscode, List jzhs, List> datas) { - List> batchcollects = lisService.BatchForZYHAndAdmissTimes(datas); - toReplaceBlank(batchcollects); - return GetColectionForJZH(syscode, jzhs, batchcollects); - } - - /** - * 取得历史采集数据 - * - * @param jzhs - * @param syscode - * @return - */ - private List getOldConllectionLog(List jzhs, String syscode) { - CollectionForJZHDto jzhDto = new CollectionForJZHDto(); - jzhDto.setJzhs(jzhs); - jzhDto.setSyscode(syscode); - String url = String.format("http://localhost:%s", getPort()); - String requstParam = JSON.toJSONString(jzhDto); - String sendPost = SpringRestTemplateUtils.getInstance().sendPost(url + "/api/conllection/logs", requstParam, MediaType.APPLICATION_JSON, null, true); - ObjectMapper objectMapper = new ObjectMapper(); - List datas = new ArrayList<>(); - try { - datas = objectMapper.readValue(sendPost, new TypeReference>() { - }); - } catch (Exception ex) { - log.error("解析失败:" + sendPost); - return null; - } - return datas; - } - - private List> GetColectionForJZH(String syscode, List jzhs, List> batchcollects) { - //转为大写 - batchcollects = toReplaceKeyUp(batchcollects); - batchcollects = batchcollects.stream().distinct().collect(Collectors.toList()); - log.debug("JZH 处理后的数据 {} 条", batchcollects.size()); - Boolean recordlog = false; - if (batchcollects != null && batchcollects.size() > 0) { - if (batchcollects.get(0).containsKey(ColectNameEnum.RecordLog.value())) { - recordlog = true; - } - } - log.debug("recordlog:{}", recordlog); - LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(); - queryWrapper.in(AfViewCollectionLog::getJzh, jzhs).eq(AfViewCollectionLog::getSysCode, syscode); - List oldcollects = afViewCollectionLogService.find(queryWrapper); -// List oldcollects = getOldConllectionLog(jzhs, syscode); - List> newcollects = new ArrayList<>(); - List updates = new ArrayList<>(); - List adds = new ArrayList<>(); - for (Map o : batchcollects) { - String fileid = String.valueOf(o.get(ColectNameEnum.FILEID.value())).trim(); - String jzhdata = String.valueOf(o.get(jzhkey)); - String MedicalRecord = String.valueOf(o.get(ColectNameEnum.MedicalRecord.value())); - if (MedicalRecord.equals(MedicalRecordEnum.zyhAndTimes.value())) { - jzhdata = String.valueOf(o.get(ColectNameEnum.ZYH.value())).trim() + "_" + String.valueOf(o.get(ColectNameEnum.AdmissTimes.value())).trim(); - } - String jzh = jzhdata; - String modifytime = String.valueOf(o.get(ColectNameEnum.ModifyTime.value())); - AfViewCollectionLog collectionLog = oldcollects.stream().filter(t -> t.getFileId().equals(fileid) && t.getJzh().equals(jzh)).findFirst().orElse(null); - log.debug("fileId {} AfViewCollectionLog is null? {}", fileid, collectionLog == null); - if (null == collectionLog) { - //电子病历,记录是否更新,合并时只给已更新的 - if (recordlog) { - o.put(ColectNameEnum.nowdata.value(), 1); - } - newcollects.add(o); - log.debug("collectionLog is null"); - AfViewCollectionLog logadd = new AfViewCollectionLog(); - logadd.setFileId(fileid); - logadd.setCreateTime(new Date()); - logadd.setFileModifyTime(modifytime); - logadd.setJzh(jzh); - logadd.setSysCode(syscode); - logadd.setId(idService.getDateSeq()); - adds.add(logadd); - continue; - } - if (!collectionLog.getFileModifyTime().equals(modifytime)) { - log.debug("collectionLog FileModifyTime is not eq view FileModifyTime"); - if (recordlog) { - o.put(ColectNameEnum.nowdata.value(), 1); - } - newcollects.add(o); - collectionLog.setFileModifyTime(modifytime); - updates.add(collectionLog); - continue; - } - if (recordlog) { - o.put(ColectNameEnum.nowdata.value(), 1); - newcollects.add(o); - } - } - - afViewCollectionLogService.saveOrUpdateBatch(adds); - afViewCollectionLogService.saveOrUpdateBatch(updates); - - return newcollects; - } - - private void SaveConllectionLog(List adds, List updates) { - - CollectionSaveDto dto = new CollectionSaveDto(); - - dto.setAdds(adds); - dto.setUpdates(updates); - String url = String.format("http://localhost:%s", getPort()); - String requstParam = JSON.toJSONString(dto); - SpringRestTemplateUtils.getInstance().sendPost(url + "/api/conllection/SaveLogs", requstParam, MediaType.APPLICATION_JSON, null, true); - } - - /** - * 把map key改为大写 - * - * @param maps - * @return - */ - private static List> toReplaceKeyUp(List> maps) { - List> data = new ArrayList<>(); - for (Map o : maps) { - Map re_map = new HashMap(); - for (Map.Entry entry : o.entrySet()) { - re_map.put(entry.getKey().trim().toUpperCase(), entry.getValue()); - } - data.add(re_map); - } - - return data; - } - - /** - * 替换掉map中的String值的前后空格 - * - * @param datas 数据 - */ - private static void toReplaceBlank(List> datas) { - if (datas == null || datas.isEmpty()) { - return; - } - for (Map data : datas) { - Set> entries = data.entrySet(); - for (Map.Entry entry : entries) { - Object value = entry.getValue(); - if (value instanceof String) { - entry.setValue(String.valueOf(value).trim()); - } - } - } - } - - private List> BatchForEXAMTIME(List> datas) { - String oldJzhkey = ""; - String syscode = String.valueOf(datas.get(0).get(ColectNameEnum.COLLECTID.value())); - List zyhs = datas.stream().map(t -> String.valueOf(t.get(ColectNameEnum.ZYH.value()))).distinct().collect(Collectors.toList()); - List> basics = getBasicForZYHs(zyhs); - if (null == basics || basics.size() <= 0) { - return new ArrayList<>(); - } - List> list = new ArrayList<>(); - for (Map o : datas) { - - List> temps = basics.stream().filter(t -> String.valueOf(t.get(ColectNameEnum.InpatientNo.value())).equals( - String.valueOf(o.get(ColectNameEnum.ZYH.value()))) - ).collect(Collectors.toList()); - - if (null == temps || temps.size() <= 0) { - continue; - } - String examTime = String.valueOf(o.get(ColectNameEnum.EXAMTIME.value())); - //region 取得出入院区间是否有数据 - Map temp = temps.stream().filter(t -> - { - String AdmissDate = String.valueOf(t.get(ColectNameEnum.AdmissDate.value())); - String DisDate = String.valueOf(t.get(ColectNameEnum.DisDate.value())); - if (examTime.compareTo(AdmissDate) >= 0 && examTime.compareTo(DisDate) <= 0) { - return true; - } - return false; - } - ).findFirst().orElse(null); - if (temp != null) { - o.put(ColectNameEnum.JZH.value(), temp.get("jzh")); - o.put(ColectNameEnum.AdmissDate.value(), temp.get(ColectNameEnum.AdmissDate.value())); - o.put(ColectNameEnum.DisDate.value(), temp.get(ColectNameEnum.DisDate.value())); - list.add(o); - continue; - } - //endregion - //region 取得大于入院日期的第一笔 - temp = temps.stream().filter(t -> - { - String AdmissDate = String.valueOf(t.get(ColectNameEnum.AdmissDate.value())); - String DisDate = String.valueOf(t.get(ColectNameEnum.DisDate.value())); - if (examTime.compareTo(AdmissDate) >= 0 && examTime.compareTo(DisDate) >= 0) { - return true; - } - return false; - } - ).sorted(Comparator.comparing(a -> String.valueOf(a.get(ColectNameEnum.AdmissDate.value())), Comparator.reverseOrder())).findFirst().orElse(null); - if (temp != null) { - o.put(ColectNameEnum.JZH.value(), temp.get("jzh")); - o.put(ColectNameEnum.AdmissDate.value(), temp.get(ColectNameEnum.AdmissDate.value())); - o.put(ColectNameEnum.DisDate.value(), examTime); - list.add(o); - continue; - } - //endregion - //region 取得最近一笔住院的 - temp = temps.stream().sorted(Comparator.comparing(a -> String.valueOf(a.get(ColectNameEnum.AdmissDate.value())), Comparator.reverseOrder())).findFirst().orElse(null); - if (temp != null) { - o.put(ColectNameEnum.JZH.value(), temp.get("jzh")); - o.put(ColectNameEnum.AdmissDate.value(), temp.get(ColectNameEnum.AdmissDate.value())); - o.put(ColectNameEnum.DisDate.value(), temp.get(ColectNameEnum.DisDate.value())); - list.add(o); - continue; - } - //endregion - - } - - //取得该患者全部住院文件 - List> batchcollects = lisService.BatchForEXAMTIME(list); - toReplaceBlank(batchcollects); - //添加记帐号 - for (Map k : batchcollects) { - Map temp = list.stream().filter(t -> String.valueOf(t.get(ColectNameEnum.ZYH.value())).equals( - String.valueOf(k.get(ColectNameEnum.ZYH.value()))) - ).findFirst().orElse(null); - k.put(ColectNameEnum.JZH.value(), temp.get(ColectNameEnum.JZH.value())); - } - list.forEach(t -> - { - t.remove(ColectNameEnum.AdmissDate.value()); - t.remove(ColectNameEnum.DisDate.value()); - } - ); - batchcollects.removeAll(list); - batchcollects.addAll(list); - List jzhs = list.stream().map(t -> String.valueOf(t.get(ColectNameEnum.JZH.value()))).collect(Collectors.toList()); - return GetColectionForJZH(syscode, jzhs, batchcollects); - } - - private List> GetColectionForJZH(BasicQueryDto dto, String oldJzhkey, String syscode, List jzhs) { - jzhs = jzhs.stream().distinct().collect(Collectors.toList()); - List> batchcollects = lisService.BatchForJZH(jzhs); - log.debug("size:{}", batchcollects.size()); - toReplaceBlank(batchcollects); - return GetColectionForJZH(syscode, jzhs, batchcollects); - } - - /** - * 根据住院号取得住院数据 - * - * @param zyhs - * @return - */ - private List> getBasicForZYHs(List zyhs) { - List> datas = new ArrayList<>(); - String url = String.format("http://localhost:%s", getPort()); - String requstParam = JSON.toJSONString(zyhs); - String sendPost = SpringRestTemplateUtils.getInstance().sendPost(url + "/api/conllection/getBasicForZYHs", requstParam, MediaType.APPLICATION_JSON, null, true); - ObjectMapper objectMapper = new ObjectMapper(); - try { - datas = objectMapper.readValue(sendPost, new TypeReference>>() { - }); - } catch (Exception ex) { - log.error("解析失败:" + sendPost); - return null; - } - - return datas; - } - - /** - * 取得本机端口 - * - * @return - */ - private String getPort() { - return environment.getProperty("local.server.port"); - } } diff --git a/docus-common/src/main/java/com/docus/server/common/IHospital.java b/docus-common/src/main/java/com/docus/server/common/IHospital.java new file mode 100644 index 0000000..f44a483 --- /dev/null +++ b/docus-common/src/main/java/com/docus/server/common/IHospital.java @@ -0,0 +1,54 @@ +package com.docus.server.common; + +import java.util.Date; +import java.util.List; +import java.util.Map; + +/** + * @author linruifeng + * @date 2023/6/14 9:26 + */ +public interface IHospital { + /** + * 分页查询 + * + * @param startDate + * @param endDate + * @param pageNum + * @param pageSize + * @return + */ + List> page(Date startDate, Date endDate, int pageNum, int pageSize); + + /** + * 记账号查询 + * + * @param jzhs + * @return + */ + List> BatchForJZH(List jzhs); + + /** + * 记账号+住院次数 + * + * @param datas + * @return + */ + List> BatchForJZHAndAdmissTimes(List> datas); + + /** + * 住院号+住院次数 + * + * @param datas + * @return + */ + List> BatchForZYHAndAdmissTimes(List> datas); + + /** + * 出院日期 + * + * @param list + * @return + */ + List> BatchForEXAMTIME(List> list); +} diff --git a/lis-sysem/pom.xml b/lis-sysem/pom.xml index 6689b78..2b67944 100644 --- a/lis-sysem/pom.xml +++ b/lis-sysem/pom.xml @@ -25,20 +25,7 @@ - - - - - - - - - - - - - org.apache.maven.plugins maven-resources-plugin @@ -64,8 +51,6 @@ - - org.apache.maven.plugins maven-jar-plugin diff --git a/lis-sysem/src/main/java/com/docus/server/lis/service/ILisService.java b/lis-sysem/src/main/java/com/docus/server/lis/service/ILisService.java index 8194d5f..1ae751d 100644 --- a/lis-sysem/src/main/java/com/docus/server/lis/service/ILisService.java +++ b/lis-sysem/src/main/java/com/docus/server/lis/service/ILisService.java @@ -1,57 +1,7 @@ package com.docus.server.lis.service; -import com.docus.server.record.common.pojo.dto.TBasicDTO; -import com.docus.server.sys.common.pojo.dto.UserDTO; +import com.docus.server.common.IHospital; -import java.util.Date; -import java.util.List; -import java.util.Map; +public interface ILisService extends IHospital { -public interface ILisService { - /** - * 分页查询 - * - * @param startDate - * @param endDate - * @param pageNum - * @param pageSize - * @return - */ - List> page(Date startDate, Date endDate, int pageNum, int pageSize); - - List getUserListView(Date startDate, Date endDate, int pageNum, int pageSize); - - List getTBasicListView(Date startDate, Date endDate, int pageNum, int pageSize); - - /** - * 记账号查询 - * - * @param jzhs - * @return - */ - List> BatchForJZH(List jzhs); - - /** - * 记账号+住院次数 - * - * @param datas - * @return - */ - List> BatchForJZHAndAdmissTimes(List> datas); - - /** - * 住院号+住院次数 - * - * @param datas - * @return - */ - List> BatchForZYHAndAdmissTimes(List> datas); - - /** - * 出院日期 - * - * @param list - * @return - */ - List> BatchForEXAMTIME(List> list); } diff --git a/lis-sysem/src/main/java/com/docus/server/lis/service/impl/LisServiceImpl.java b/lis-sysem/src/main/java/com/docus/server/lis/service/impl/LisServiceImpl.java index 41f74a7..e394c33 100644 --- a/lis-sysem/src/main/java/com/docus/server/lis/service/impl/LisServiceImpl.java +++ b/lis-sysem/src/main/java/com/docus/server/lis/service/impl/LisServiceImpl.java @@ -1,11 +1,7 @@ package com.docus.server.lis.service.impl; import com.docus.server.lis.infrastructure.mapper.LisDeptMapper; -import com.docus.server.lis.infrastructure.mapper.LisTBasicMapper; -import com.docus.server.lis.infrastructure.mapper.LisUserMapper; import com.docus.server.lis.service.ILisService; -import com.docus.server.record.common.pojo.dto.TBasicDTO; -import com.docus.server.sys.common.pojo.dto.UserDTO; import lombok.AllArgsConstructor; import org.springframework.stereotype.Component; @@ -18,25 +14,12 @@ import java.util.Map; public class LisServiceImpl implements ILisService { private final LisDeptMapper hisDeptMapper; - private final LisUserMapper hisUserMapper; - private final LisTBasicMapper hisTBasicMapper; @Override public List> page(Date startDate, Date endDate, int pageNum, int pageSize) { return hisDeptMapper.page(startDate, endDate, (pageNum - 1) * pageSize, pageSize); } - - @Override - public List getUserListView(Date startDate, Date endDate, int pageNum, int pageSize) { - return hisUserMapper.getUserListView(startDate, endDate, (pageNum - 1) * pageSize, pageSize); - } - - @Override - public List getTBasicListView(Date startDate, Date endDate, int pageNum, int pageSize) { - return hisTBasicMapper.getTBasicListView(startDate, endDate, (pageNum - 1) * pageSize, pageSize); - } - @Override public List> BatchForJZH(List jzhs) { return hisDeptMapper.BatchForJZH(jzhs); diff --git a/lis-sysem/src/main/resources/mapper/LisDeptMapper.xml b/lis-sysem/src/main/resources/mapper/LisDeptMapper.xml index 112dd1d..61b658e 100644 --- a/lis-sysem/src/main/resources/mapper/LisDeptMapper.xml +++ b/lis-sysem/src/main/resources/mapper/LisDeptMapper.xml @@ -47,7 +47,7 @@ 0 AS state, '' AS jch, '' AS checktime, - AFFIRM_TIME AS MODIFYTIME + date_format(AFFIRM_TIME, '%Y-%m-%d %H:%i:%s') AS MODIFYTIME FROM V_JSWZH_LISRECORD WHERE @@ -74,7 +74,7 @@ 0 AS state, '' AS jch, '' AS checktime, - AFFIRM_TIME AS MODIFYTIME + date_format(AFFIRM_TIME, '%Y-%m-%d %H:%i:%s') AS MODIFYTIME FROM V_JSWZH_LISRECORD WHERE @@ -100,7 +100,7 @@ 0 AS state, '' AS jch, '' AS checktime, - AFFIRM_TIME AS MODIFYTIME + date_format(AFFIRM_TIME, '%Y-%m-%d %H:%i:%s') AS MODIFYTIME FROM V_JSWZH_LISRECORD WHERE @@ -126,7 +126,7 @@ 0 AS state, '' AS jch, '' AS checktime, - AFFIRM_TIME AS MODIFYTIME + date_format(AFFIRM_TIME, '%Y-%m-%d %H:%i:%s') AS MODIFYTIME FROM V_JSWZH_LISRECORD WHERE