陈昶聿
5 小时以前 bd0634ddee19487b1f82e782ff1fa9f18cb88a3d
ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/impl/CollectHISServiceImpl.java
@@ -74,7 +74,11 @@
    @Value("${spring.profiles.active}")
    private String active;
    @Autowired
    private PatMedOperationMapper patMedOperationMapper;
    @Autowired
    private PatMedOperationItemMapper patMedOperationItemMapper;
    @Override
    public List<PatArchive> selectPatArchiveList(PatArchive patArchive) {
@@ -127,6 +131,12 @@
                utilsMapper.updateSql("update sys_sync_time set startTime='" + endTime + "' where syncName='pat_med_outhosp' ");
            }
            //同步手术信息
            syncTemp = syncList.stream().filter(row -> row.get("syncName").equals("pat_med_operation")).collect(Collectors.toList());
            if (syncTemp.size() > 0) {
                count += syncOper(syncTemp.get(0).get("startTime") + "", endTime);
                utilsMapper.updateSql("update sys_sync_time set startTime='" + endTime + "' where syncName='pat_med_operation' ");
            }
        } else {
            log.info("同步任务时间sys_sync_time表中没有需要同步的任务");
@@ -311,6 +321,151 @@
        return count;
    }
    /**
     * 同步手术信息
     *
     * @param
     * @return
     */
    @Override
    public Integer syncOper(String startTime, String endTime) {
        Integer count = 0;
        PatMedOperation patMedOperation = new PatMedOperation();
        patMedOperation.setLastStartTime(startTime);
        patMedOperation.setLastEndTime(endTime);
        List<PatMedOperation> patMedOperations = chMapper.selectOperList(patMedOperation);
        Map<String, Long> patIdHisMap = buildOperationPatIdHisMap(patMedOperations);
        log.info("同步手术信息数量" + patMedOperations.size());
        for (PatMedOperation operation : patMedOperations) {
            try {
                Long patId = patIdHisMap.get(operation.getPatidHis());
                if (patId == null) {
                    patId = syncSinglePatient(operation.getPatidHis());
                    if (patId != null) {
                        patIdHisMap.put(operation.getPatidHis(), patId);
                    }
                }
                if (patId != null) {
                    operation.setPatid(patId);
                }
                PatMedOperation oper = new PatMedOperation();
                oper.setOpid(operation.getOpid());
                List<PatMedOperation> patMedOperations1 = patMedOperationMapper.selectPatMedOperationList(oper);
                if (CollectionUtils.isNotEmpty(patMedOperations1)) {
                    operation.setId(patMedOperations1.get(0).getId());
                    operation.setUpdateTime(new Date());
                    count += patMedOperationMapper.updatePatMedOperation(patMedOperations1.get(0));
                    syncOperItem(operation);
                } else {
                    operation.setCreateTime(new Date());
                    count += patMedOperationMapper.insertPatMedOperation(operation);
                    syncOperItem(operation);
                }
            } catch (Exception ex) {
                log.info("同步手术信息:" + ex.getMessage());
            }
        }
        return count;
    }
    /**
     * 同步手术信息
     *
     * @param
     * @return
     */
    private Integer syncOperItem(PatMedOperation operation) {
        Integer count = 0;
        PatMedOperationItem patMedOperationItem = new PatMedOperationItem();
        patMedOperationItem.setOrgid(operation.getOrgid());
        if(StringUtils.isNotEmpty(operation.getOpid())){
            patMedOperationItem.setOpid(operation.getOpid());
            patMedOperationItem.setLastStartTime(operation.getLastStartTime());
            patMedOperationItem.setLastEndTime(operation.getLastEndTime());
            List<PatMedOperationItem> patMedOperationItems = chMapper.selectOperItemList(patMedOperationItem);
            log.info("同步手术详情信息数量" + patMedOperationItems.size());
            for (PatMedOperationItem operationItem : patMedOperationItems) {
                try {
                    PatMedOperationItem operItem = new PatMedOperationItem();
                    operItem.setOpid(operationItem.getOpid());
                    operItem.setOperationid(operationItem.getOperationid());
                    List<PatMedOperationItem> patMedOperationItems1 = patMedOperationItemMapper.selectPatMedOperationItemList(operItem);
                    if (CollectionUtils.isNotEmpty(patMedOperationItems1)) {
                        operationItem.setId(patMedOperationItems1.get(0).getId());
                        operationItem.setUpdateTime(new Date());
                        count += patMedOperationItemMapper.updatePatMedOperationItem(operationItem);
                    } else {
                        operation.setCreateTime(new Date());
                        count += patMedOperationItemMapper.insertPatMedOperationItem(operationItem);
                    }
                } catch (Exception ex) {
                    log.info("同步手术详情信息:" + ex.getMessage());
                }
            }
//            try {
//                patMedOperationItemMapper.deleteHardPatMedOperationItemByOpId(operation.getOpid());
//                count += patMedOperationItemMapper.insertPatMedOperationItems(patMedOperationItems);
//            }catch (Exception ex) {
//                log.info("同步手术详情信息:" + ex.getMessage());
//            }
        }
        return count;
    }
    private Map<String, Long> buildOperationPatIdHisMap(List<PatMedOperation> operations) {
        List<String> patidHiss = operations.stream()
                .map(PatMedOperation::getPatidHis)
                .filter(StringUtils::isNotEmpty)
                .distinct()
                .collect(Collectors.toList());
        if (CollectionUtils.isEmpty(patidHiss)) {
            return new HashMap<>();
        }
        return patArchiveMapper.selectPatArchiveByPatidHiss(patidHiss).stream()
                .filter(item -> StringUtils.isNotEmpty(item.getPatidHis()) && item.getId() !=
                        null)
                .collect(Collectors.toMap(
                        PatArchive::getPatidHis,
                        PatArchive::getId,
                        (a, b) -> a
                ));
    }
    private Long syncSinglePatient(String patidHis) {
        if (StringUtils.isEmpty(patidHis)) {
            return null;
        }
        PatArchive hisQuery = new PatArchive();
        hisQuery.setPatidHis(patidHis);
        hisQuery.setPageSize(5);
        List<PatArchive> hisArchives = chMapper.selectPatArchiveList(hisQuery);
        if (CollectionUtils.isEmpty(hisArchives)) {
            return null;
        }
        PatArchive localQuery = new PatArchive();
        localQuery.setPatidHis(patidHis);
        List<PatArchive> localArchives = patArchiveMapper.selectPatArchiveList(localQuery);
        PatArchive hisArchive = hisArchives.get(0);
        if (CollectionUtils.isNotEmpty(localArchives)) {
            hisArchive.setId(localArchives.get(0).getId());
            hisArchive.setUpdateTime(new Date());
            patArchiveMapper.updatePatArchive(hisArchive);
            return localArchives.get(0).getId();
        } else {
            hisArchive.setCreateTime(new Date());
            patArchiveMapper.insertPatArchiveSingle(hisArchive);
            return hisArchive.getId();
        }
    }
    @Override
    public Integer selectPatMedInhospList(PatMedInhosp patMedInhosp) {
        List<PatMedInhosp> patMedInhospList = chMapper.selectPatMedInhospList(patMedInhosp);